关于MyBatis的运行过程

前言

粗浅的记录一下mybatis的运行过程,欢迎学习交流。

正文

MyBatis的基础使用代码如下:

//读取mybatis配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//创建SqlSession工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();

//创建mapper对象
LogMapper logMapper = session.getMapper(LogMapper.class);
//使用mapper对象对数据库进行操作...
List<Log> list = logMapper.selAll();
//...

//提交事务
session.commit();
//关闭session
session.close();

生成SqlSession工厂

查看这句代码
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
点进去查看源码
在这里插入图片描述
继续
关于MyBatis的运行过程_第1张图片
当走到这个build方法里面时,根据mybatis.xml配置文件的流生成了一个XMLConfigBuilder对象,XMLConfigBuilder是对mybatis的配置文件进行解析的类,会对myabtis解析后的信息存放在Configuration对象中(在构造XMLConfigBuilder时生成),Configuration对象相当于实体,存放着标签对应的配置信息。
然后进入build(parser.parse());注意这里parser.parse()其实就是Configuration对象。
在这里插入图片描述
使用Configuration实例化返回了默认的SqlSession默认工厂对象DefaultSqlSessionFactory。

调用工厂生产SqlSession

SqlSession session = factory.openSession();
点击查看源码,这里是DefaultSqlSessionFactory的openSession()方法哦
在这里插入图片描述
关于MyBatis的运行过程_第2张图片
这里有这么一些对象的建立

1Transaction 事务类
	1.1 每一个 SqlSession 会带有一个 Transaction 对象. 
2 TransactionFactory 事务工厂,通过配置信息构造
	2.1 负责生产 Transaction
3 Executor MyBatis 执行器
	3.1 作用:负责执行 SQL 命令
	3.2 相当于 JDBC 中 statement 对象(或 PreparedStatement
	或 CallableStatement)
	3.3 默认的执行器实现类 SimpleExcutor
	3.4 批量操作实现类 BatchExcutor
	3.5 通过  factory.openSession(参数控制),控制是否自动提交事务
4 DefaultSqlSession 是 SqlSession 接口的实现类
5 ExceptionFactory MyBatis 中异常工厂

概括为:每次创建 SqlSession 时,都需要由 TransactionFactory 创建 Transaction对象,同时还需要创建 SqlSession 的执行器 Excutor,最后实例化DefaultSqlSession,传递给 SqlSession 接口. 根据项目需求使用 SqlSession 接口中的 API 完成具体的事务操作. 如果事务执行失败,需要进行 rollback 回滚事务. 如果事务执行成功提交给数据库.关闭 SqlSession。

结束

可参考这篇博客,有流程图看
Mybatis工作原理

最后上面总结为学习尚学堂视频归纳,感谢尚学堂。归纳如有错误请帮忙指正,谢谢。

你可能感兴趣的:(Java)