关于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);
点进去查看源码
在这里插入图片描述
继续
在这里插入图片描述
当走到这个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()方法哦
在这里插入图片描述
在这里插入图片描述
这里有这么一些对象的建立

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工作原理

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值