加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

MyBatis对象分析及创建工具类

发布时间:2021-05-21 07:49:49 所属栏目:大数据 来源: https://www.jb51.cc
导读:目录 一、MyBatis 对象分析 1. Resources 类 2. SqlSessionFactoryBuilder类 3. SqlSessionFactory接口 4. SqlSession 接口 @L_301_5@ 1. 创建 MyBatisUtils类 2. 使用MyBatisUtils 一、MyBatis 对象分析 1. Resources 类 mybatis中的一个类, 负责读取主配

目录
  • 一、MyBatis 对象分析
    • 1. Resources 类
    • 2. SqlSessionFactoryBuilder类
    • 3. SqlSessionFactory接口
    • 4. SqlSession 接口
  • @L_301_5@
    • 1. 创建 MyBatisUtils类
    • 2. 使用MyBatisUtils

一、MyBatis 对象分析

1. Resources 类

mybatis中的一个类, 负责读取主配置文件,返回 IO 流对象

InputStream in = Resources.getResourceAsStream("mybatis.xml");

2. sqlSessionFactoryBuilder类

sqlSessionFactory 的 创 建 , 需 要 使 用 sqlSessionFactoryBuilder 对 象 的 build() 方 法 。

由 于sqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。

所以,一般会将该 sqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁

sqlSessionFactoryBuilder builder = new sqlSessionFactoryBuilder();
sqlSessionFactory factory = builder.build(in);

3. sqlSessionFactory接口

重量级对象, 程序创建一个对象耗时比较长,使用资源比较多,是线程安全的,

在整个项目中,有一个就够用了

sqlSessionFactory作用: 获取sqlSession对象

sqlSession sqlSession = factory.openSession();

openSession()方法说明:

  • openSession() :无参数的, 获取是非自动提交事务的sqlSession对象
  • openSession(boolean): openSession(true) 获取自动提交事务的sqlSession.
    openSession(false) 非自动提交事务的sqlSession对象

对于 insert 、delete、update 如果使用的无参数的,那么需要在执行完sql语句之后,手动的提交事务

4. sqlSession 接口

sqlSession 接口对象用于执行持久化操作。

sqlSession接口 :定义了操作数据的方法 例如 selectOne(),selectList(),insert(),update(),delete(),commit(),rollback()

在IDEA中 Ctrl + H就可以看到实现类

需要注意:

sqlSession对象不是线程安全的,需要在方法内部使用, 在执行sql语句之前,使用openSession()获取sqlSession对象。
在执行完sql语句后,需要关闭它,执行sqlSession.close(). 这样能保证他的使用是线程安全的

这样的话在看之前写的操作就懂了

@H_502_99@public void testInsert() throws IOException { // 访问mybatis读取student数据 //1.定义mybatis主配置文件的名称,从类路径的根开始(target/clasess),编译之后的目录 String config = "mybatis.xml"; //2.读取这个config表示的文件 InputStream in = Resources.getResourceAsStream(config); //3.创建了sqlSessionFactoryBuilder对象 sqlSessionFactoryBuilder builder = new sqlSessionFactoryBuilder(); //4.创建sqlSessionFactory对象 sqlSessionFactory factory = builder.build(in); //5.获取sqlSession对象,从sqlSessionFactory中获取sqlSession sqlSession sqlSession = factory.openSession(); //6.【重要】指定要执行的sql语句的标识。 sql映射文件中的namespace + "." + 标签的id值 // String sqlId = "com.md.dao.StudentDao"+"."+"selectStudents"; String sqlId = "com.md.dao.StudentDao.insertStudent"; //7.【重要】执行sql语句,通过sqlId找到语句 // 第一个参数是执行的sql语句,第二个是对象 int i = sqlSession.insert(sqlId,new Student(1004,"刘桑","ls@qq.com",18)); // 需要注意,mybatis默认不是自动提交事务,所以在写完insert、update、delete之后,手动的提交事务 sqlSession.commit(); //8.输出结果 System.out.println("执行insert影响的行数:"+i); //9.关闭sqlSession对象 sqlSession.close(); }

二、创建工具类

1. 创建 MyBatisUtils类

在com.md下新建一个包utils,里面创建MyBatisUtils

至于为什么使用静态代码块,主要看sqlSessionFactory接口的特性

@H_502_99@package com.md.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.sqlSession; import org.apache.ibatis.session.sqlSessionFactory; import org.apache.ibatis.session.sqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; /** * @author MD * @create 2020-08-05 10:59 */ public class MyBatisUtils { private static sqlSessionFactory factory = null; // 保证了sqlSessionFactory对象只创建一次 static { // 和你项目的主配置文件名一致 String config = "mybatis.xml"; // 读取这个config表示的文件 try { InputStream in = Resources.getResourceAsStream(config); // 创建了sqlSessionFactory对象,使用创建了sqlSessionFactoryBuilder对象 factory = new sqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } // 获取sqlSession的方法 public static sqlSession getsqlSession() { sqlSession sqlSession = null; if (factory != null){ // 非自动提交事务 sqlSession = factory.openSession(); } return sqlSession; } }

2. 使用MyBatisUtils

@H_502_99@public static void main(String[] args) { sqlSession sqlSession = MyBatisUtils.getsqlSession(); String sqlId = "com.md.dao.StudentDao.selectStudents"; List<Student> studentList = sqlSession.selectList(sqlId); studentList.forEach(stu -> System.out.println(stu)); sqlSession.close(); }

这样就方便很多,只用专注于写sql就行了

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读