Mybatis细致讲解

x33g5p2x  于2022-03-08 转载在 其他  
字(3.8k)|赞(0)|评价(0)|浏览(266)

我们学过servlet,在servlet项目中,我们使用的是JDBC的五大基本步骤,这里先回顾一下:

1:加载驱动

  • Class.forName(“com.mysql.cj.jdbc.Driver”);

2:获取数据库连接:

  • String url = “jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false”

  • String user = root;

  • String password = root

  • Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/xxx”, “root”, “root”);

3:获取执行sql语句的对象:

  • String sql = …

  • Statement statement = conn.createStatement(sql);

4:执行sql语句:

  • ResultSet resultSet = statement.executeUpdate(sql);

5:操作结果集,关闭连接:

这里我们假设已经有了一个实体类:User,然后可以创建集合遍历结果集并存入集合中:

  1. List<User> list = new ArrayList<>();
  2. while(resultSet .next){
  3. User user = new User;
  4. user.setUserId= (resultSet.getInt("userId"));
  5. user.setUserName = (resultSet.getInt("userName"));
  6. list.add(user)
  7. }

然后我来说一下Mybatis是什么,Mybatis其实就是帮我们封装好了上述的步骤,因为在我们学习servlet中,我们会发现我们每每使用一次数据库就需要不断的去加载驱动,这样做很麻烦而且浪费了内存,所以Mybatis帮我们做的就是封装起来这些

我具体来演示一下,首先我们创建好了一个基本的Mybatis项目,第一步我们就是去写好Mybatis的基本配置文件:

  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. <!-- 配置mybatis环境-->
  7. <environments default="development">
  8. <!-- id:数据源名称-->
  9. <environment id="development">
  10. <!-- 事务类型:使用JDBC的事务,使用Connection的提交和回滚-->
  11. <transactionManager type="JDBC"/>
  12. <!-- 数据源:dataSource数据源,创建Connection对象 type=“POOLED“ 使用数据库连接池技术 -->
  13. <dataSource type="POOLED">
  14. <!-- 连接数据库的四个参数 mysql8.0-->
  15. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  16. <property name="url"
  17. value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false"/>
  18. <property name="username" value="root"/>
  19. <property name="password" value="root"/>
  20. </dataSource>
  21. </environment>
  22. </environments>
  23. <mappers>
  24. <mapper resource="com/ftz/demo/pojo/User.xml"/>
  25. </mappers>
  26. </configuration>

上面我很详细的注释了每一步的目的是什么,我们会发现在原来JDBC中的驱动和连接都写在了这里,其中在这个地方用到了数据库连接池技术,上面的代码我们在Mybatis中文官网就可以直接复制粘贴,都是不需要自己手写的!:

然后我们接下来就是去写一个实体类:

上面简单的用了一下Lombok插件自动生成的get set方法,大家也可以自己手写,然后在写好这些后,按照JDBC我们需要写sql语句了,在Mybatis我们的sql语句是可以直接写在.xml文件中的,我们也可以叫做mysql的映射文件

我们这里由于是.xml文件,所以是以标签的形式写主题内容,我们的sql语句就写在了select标签里面,这里我们比原来多写了一个命名空间叫做namespace,这里可以等价于我们曾经写的方法名字,说白了就是为这个sql语句单独起一个名字,方便我们后续调用sql语句的时候明确调用哪一条语句,并且这里需要写清楚返回值类型,我们这里直接使得返回类型对应实体类,这也就强制实体类中创建的属性必须与数据库中的字段一一对应!

然后我们回到Mybatis.xml这个配置文件中,为了保证我们可以让mybatis文件索引到我们的mysql映射文件,我们需要在下面加上mapper映射路径:

接下来我们就可以写测试类了:

  1. package com.ftz.demo.test;
  2. import com.ftz.demo.pojo.User;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. import org.junit.Test;
  8. import java.io.IOException;
  9. import java.io.Reader;
  10. import java.util.List;
  11. public class Test01 {
  12. @Test
  13. public void test01() throws IOException {
  14. //1:读取mybatis配置文件
  15. Reader reader = Resources.getResourceAsReader("mybatis.xml");
  16. //2:创建sqlSessionFactory对象,目的是获取sqlSession的创建工厂:其实就是connection对象的封装
  17. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  18. //3:创建SqlSession
  19. SqlSession sqlSession = sqlSessionFactory.openSession();
  20. //4:执行sql语句
  21. List<User> userList = sqlSession.selectList("com.ftz.demo.pojo.User.queryALL");
  22. // 5:遍历结果
  23. for (User user:userList){
  24. System.out.println(user);
  25. }
  26. //6:关闭资源
  27. sqlSession.close();
  28. }
  29. }

在测试类中,我们发现,前面几步都是Mybatis帮我们做的,我们唯一决定性的就是上面我写的第四步执行sql语句: List<User> userList = sqlSession.selectList("com.ftz.demo.pojo.User.queryALL");

所以说Mybatis本质还是JDBC,只不过简化了我们的配置,可以理解成我们有了一个工厂去实现原来JDBC中我们的操作,使用工厂创建,并且修改sql语句可以不去修改源码,而是直接修改配置文件就好

还有一个就是过滤文件,由于我们写的xml都是在resources下面的,所以我们选哟在pom里面配置文件过滤:

相关文章

目录