从零开始搭建Mybatis框架

冷不防 2022-05-15 06:07 516阅读 0赞

Mybatis是一个基于java的持久型框架,有了Mybatis,终于可以不用写jdbc代码这种东西了,写个搭建Mybatis框架过程,就当做个笔记吧。

(一)新建一个web项目,起好项目名之后一路next,finish。下面是项目建好后的工程目录(图中用的Eclipse工具,项目名FirstMybatis)

70

70 1

(二)加入Mybatis框架需要的jar包,我这里添加了4个,分别是:

jstl-1.2.jar //jstl标准标签库,后面使用jsp页面来显示数据

log4j-1.2.17.jar //日志包

mybatis-3.2.0.jar //Mybatis的jar包,必须加入上面log4j-1.2.17.jar这个jar包,否则会报错,Mybatis更高的版本可能不用

mysql-connector-5.1.8.jar //mysql驱动包,要连接mysql数据库必须加入

把上面的jar包放WebContent/WEB-INF/lib下添加依赖

为了便于管理,我在src下新建了5个包,包名可以自己定义

这里的Controller包用来存放控制器类,Service包用来处理业务,Pojo包存放实体类,Mapper包作为数据访问层,Utils包作为工具包

在src目录下再新建一个mybatis-config.xml文件,用来配置Mybatis的各种配置

下面贴图

70 2

(三)下面就是mybatis的各种配置了

打开mybatis-config.xml

配置文件内容如下

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- environments即环境 -->
  7. <!-- 为了方便数据库配置,使用多种配置environment时,可以通过environments中的default
  8. 来声明默认使用哪种配置 -->
  9. <environments default="mysql">
  10. <environment id="mysql">
  11. <transactionManager type="JDBC"/>
  12. <!-- pooled即池,配置连接池 -->
  13. <dataSource type="POOLED">
  14. <!-- 配置驱动 -->
  15. <property name="driver" value="com.mysql.jdbc.Driver"/>
  16. <!-- 配置连接地址 -->
  17. <property name="url" value="jdbc:mysql://localhost:3306/test"/>
  18. <!-- 配置数据库用户名 -->
  19. <property name="username" value="root"/>
  20. <!-- 配置数据库密码 -->
  21. <property name="password" value="123456"/>
  22. </dataSource>
  23. </environment>
  24. </environments>
  25. <!-- 关联配置映射文件 -->
  26. <mappers>
  27. <!-- 包扫描关联映射文件 -->
  28. <package name="Mapper"/>
  29. </mappers>
  30. </configuration>

配置文件中的连接地址、用户名、密码改成自己的

其中的标签用来关联映射文件,因为要在Mapper包下建立映射文件来进行数据操作,所以要关联的映射文件就直接写上这个包名就可以了,它会自动扫描这个包下所有的用到Mybatis的文件。

配置文件已经完成了,对于上面的配置,还可以用另一种方式配置

如果觉得麻烦的话可以忽略下面内容,直接跳到(四)

在src目录下建个后缀为properties的文件,比如我新建一个db.properties

70 3

db.properties文件中写你的配置参数

比如我的数据库配置参数

  1. driver=com.mysql.jdbc.Driver
  2. url=jdbc:mysql://localhost:3306/hibernatedb
  3. username=root
  4. password=123456

然后在mybatis-config.xml文件的标签中加入这句代码

  1. <!-- 加载全局配置文件 -->
  2. <properties resource="db.properties"></properties>

申明db.properties文件作为全局配置

配置完成后我们就可以用${driver}(表示db.properties中driver对应的值)来配置数据库了

例如可以将上面的数据库配置写成下面这样

  1. <environments default="mysql">
  2. <environment id="mysql">
  3. <transactionManager type="JDBC"/>
  4. <!-- pooled即池,配置连接池 -->
  5. <dataSource type="POOLED">
  6. <!-- 配置驱动 -->
  7. <property name="driver" value="${driver}"/>
  8. <!-- 配置连接地址 -->
  9. <property name="url" value="${url}"/>
  10. <!-- 配置数据库用户名 -->
  11. <property name="username" value="${username}"/>
  12. <!-- 配置数据库密码 -->
  13. <property name="password" value="${password}"/>
  14. </dataSource>
  15. </environment>
  16. </environment>

这样,在数据库配置参数有所变动时,也可以直接在db.properties中修改

(四)然后再来写个工具类,用来获取SqlSession的连接工厂

在Utils包下新建一个SqlSessionFactoryUtils.class,名字自定义

代码如下

  1. public class SqlSessionFactoryUtils {
  2. //定义一个变量保存mybatis框架的连接工厂
  3. private static SqlSessionFactory sqlSessionFactory;
  4. //初始化连接工厂
  5. //静态代码块,与类一起加载,访问类的时候与类一起加载
  6. //读取配置文件来做Mybatis连接工厂
  7. static {
  8. try {
  9. String resource = "mybatis-config.xml";
  10. //读取配置文件,自动到src类路径下寻找配置文件
  11. InputStream inputStream = Resources.getResourceAsStream(resource);
  12. //将inputStream转换成Mybatis的连接工厂
  13. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  14. } catch (Exception e) {
  15. // TODO Auto-generated catch block
  16. e.printStackTrace();
  17. }
  18. }
  19. //定义一个获取连接的方法
  20. public static SqlSession getSqlSession()
  21. {
  22. return sqlSessionFactory.openSession();
  23. }
  24. //释放连接,关闭资源
  25. public static void close(SqlSession sqlSession)
  26. {
  27. if(sqlSession!=null)sqlSession.close();
  28. }
  29. }

(五)…一大堆配置完成了,后面是具体的使用

首先在Pojo中新建一个User类,保存用户信息,这里示范的数据库名为test,有一张user表,id,name,address三个字段

User类用来存放从user表中取出来的数据,字段必须对应

  1. public class User {
  2. int id;
  3. String name;
  4. String password;
  5. public int getId() {
  6. return id;
  7. }
  8. public void setId(int id) {
  9. this.id = id;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public String getPassword() {
  18. return password;
  19. }
  20. public void setPassword(String password) {
  21. this.password = password;
  22. }
  23. }

在Mapper包下面新建一个接口类UserMapper.java(必须在Mapper包下,之前配置文件中配置扫描此包,不写在这里是找不到这个文件的)

在接口类中写一个用来查询数据的方法

为这个方法加上注解(@Select注解:执行查询操作,写入查询的sql语句)

  1. public interface UserMapper {
  2. @Select("select * from user")
  3. public List<User> findAll();
  4. }

(六)在Service包下新建一个UserService.java作为用户的业务处理类

  1. public class UserService {
  2. public List<User> findAll()
  3. {
  4. //从sqlSession工具类中获取SqlSession
  5. SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
  6. //从sqlSession中获取映射文件
  7. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  8. //调用userMapper中的findAll方法,执行查询语句,并返回一个List<User>数据
  9. return userMapper.findAll();
  10. }
  11. }

终于到最后一部分了…

接下来要新建一个控制器,再调用UserService业务类中的finAll方法,拿到数据,再绑到jsp页面中显示

先到Controller包下建一个servlet控制器,比如我这里叫UserController.java

在Get方法中调用UserService中的findAll方法,获得返回的数据,跳转到jsp页面展示数据

  1. @WebServlet("/UserController")
  2. public class UserController extends HttpServlet {
  3. private static final long serialVersionUID = 1L;
  4. /**
  5. * @see HttpServlet#HttpServlet()
  6. */
  7. public UserController() {
  8. super();
  9. // TODO Auto-generated constructor stub
  10. }
  11. /**
  12. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  13. */
  14. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15. // TODO Auto-generated method stub
  16. UserService userService = new UserService();
  17. //获取返回的数据
  18. request.setAttribute("users", userService.findAll());
  19. //跳转页面显示
  20. request.getRequestDispatcher("/WEB-INF/jsp/user.jsp").forward(request, response);
  21. }
  22. /**
  23. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  24. */
  25. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  26. // TODO Auto-generated method stub
  27. doGet(request, response);
  28. }
  29. }

在WEB-INF目录下新建个jsp文件夹,在其中建立个user.jsp文件

把请求的数据绑定到jsp页面上

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!-- 这里要用到jstl标签库中的标签,必须加上下面这行代码 -->
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>Insert title here</title>
  10. </head>
  11. <body>
  12. <table>
  13. <!-- 使用forEach标签循环绑定数据 -->
  14. <c:forEach items="${users}" var="user">
  15. <tr>
  16. <td>${user.id}</td>
  17. <td>${user.name}</td>
  18. <td>${user.address}</td>
  19. </tr>
  20. </c:forEach>
  21. </table>
  22. </body>
  23. </html>

(七)最后,启动服务器,在浏览器中输入http://localhost:8080/FirstMyBatis/UserController(写你自己的项目名和地址)

数据表中添加几条数据用于测试,页面正常显示,搭建成功

70 4

对于UserMapper类中的增删改查,与注解@Select同理,改成@Insert、@Update、@Delete即可。

UserMapper类中的数据操作除了可以用注解方式实现外,还可以通过xml文件来实现,有空再补充上去。。。

最后,贴一张完整的项目路径图

70 5

发表评论

表情:
评论列表 (有 0 条评论,516人围观)

还没有评论,来说两句吧...

相关阅读