文章目录
mybatis结构和流程
简单流程
1.读取mybatis配置
将mybatis配置文件读取成input输入流
2.创建SqlSessionFactory
执行SqlSessionFactoryBuilder的builde方法参数为第一步中的输入流,得到SqlSessionFactory对象
初始化配置文件信息的本质就是创建Configuration对象,将解析的xml数据封装到Configuration内部的属性中。
- XMLConfigBuilder解析配置中的参数获取数据库源
- XMLMapperBuilder读取mapper配置文件
3.执行sql
- 当需要执行sql时,获取到相应的sqlsession,
- 根据传入的Statement Id和参数由excutor进行sql装配和解析
- 最后调用jdbc执行sql,再有excutor封装返回结果
重点知识
有几种创建mapper方式?优先级由高到底是什么?
<configuration>
<mappers>
<package name="com.test.mapper"/>
</mappers>
</configuration>
- package目录
<configuration>
<mappers>
<!-- 使用这个方案,可以单独指定Mapper的位置 -->
<mapper resource="mybatis/mappings/UserMapper.xml"/>
</mappers>
</configuration>
- resource相对位置
<configuration>
<mappers>
<!-- 使用这个方案,可以单独指定Mapper的位置 -->
<mapper url="file://详细地址"/>
</mappers>
</configuration>
- url绝对位置
<configuration>
<mappers>
<mapper class="com.test.mapper.UseMapper"/>
</mappers>
</configuration>
class工程包名+路径
mybatis 事务管理机制
MyBatis将事务抽象成了Transaction接口
该接口定义了创建(create)、提交(commit)、回滚(rollback)、关闭(close)
配置
<environment>
<transactionManager type="JDBC"/>
</environment>
mybatis config中其子节点 的type 会决定我们用什么类型的事务管理机制。
创建
通过指定的Connection对象创建Transaction或者通过数据源DataSource来创建Transaction
使用JDBC的事务管理机制:
即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等
使用jdbc事务会创建JdbcTransactionFactory,JdbcTransaction直接使用JDBC的提交和回滚事务管理机制 。
使用MANAGED的事务管理机制:
这种机制MyBatis自身不会去实现事务管理,而是让程序的容器如(spring)来实现对事务的管理。
使用MANAGED事务会创建MangedTransactionFactory,ManagedTransaction完全由容器来实现。
mybatis缓存机制
一级缓存
在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession中完全相同的sql语句不再执行第二次,及一次会话执行两次同一个操作。
二级缓存
二级缓存默认是不开启的,需要在mapper中加入cache标签开启,但二级缓存sql语句返回对象必须是序列化之后的才可以正常使用。
二级缓存在同一个sqlsession中select语句会缓存数据,但sqlsession执行insert update delete会刷新缓存
ps:也可以增加标记Statement是否使用缓存
会话机制
在没有加事务的情况下,确实是Mapper的每次请求数据库,都会创建一个SqlSession与数据库交互,加了事务就会共用一个sqlsession
名词解释
executor 执行器组装sql设置参数,并且负责将jdbc的结果集转化为class实例
Statement 相当于某个java class中的查询方法、mapper文件中的某个sql语句
SqlSession相当于java中的class,、mapper文件
SqlSessionFactory一个mybatis服务只有一个工厂是线程安全的它相当于一个容器把所有的mapper从xml转换成了bean
参考文章
blog.csdn.net/luanlouis/a…
www.bilibili.com/video/BV14K…
blog.csdn.net/weixin_4318…