【MyBatis】架构分析和缓存机制
程序员文章站
2022-04-15 20:20:54
创建 SqlSessionFactory 对象。通过 SqlSessionFactory 获取 SqlSession 对象。通过 SqlSession 获得 Mapper 代理对象。通过 Mapper 代理对象,执行数据库操作。执行成功,则使用 SqlSession 提交事务。执行失败,则使用 SqlSession 回滚事务。最终,关闭会话。...
1.架构图
mybatis编程流程
创建 SqlSessionFactory 对象。
通过 SqlSessionFactory 获取 SqlSession 对象。
通过 SqlSession 获得 Mapper 代理对象。
通过 Mapper 代理对象,执行数据库操作。
执行成功,则使用 SqlSession 提交事务。
执行失败,则使用 SqlSession 回滚事务。
最终,关闭会话。
2.缓存机制
2.1 一级缓存
在没有配置的默认情况下,默认开启一级缓存
一级缓存只是相对于同一个SqlSession而言,mybatis提供了一级缓存,用来储存使用同一个SqlSession对象调用一个Mapper方法,这样的操作只执行一次,因为在SelSession第一次查询后,Mybatis就会将其存放于缓存中,下次查询直接去缓存中取
怎么判断某两次查询是完全相同的查询?
mybatis认为,对于两次查询,如果以下条件都完全一样,那么就认为它们是完全相同的两次查询。
- 传入的statementId
- 查询时要求的结果集中的结果范围
- 这次查询所产生的最终要传递给JDBC java.sql.Preparedstatement的Sql语句字符串(boundSql.getSql() )
- 传递给java.sql.Statement要设置的参数值
2.2 二级缓存
二级缓存是Application级别的缓存
二级缓存开启后,同一个namespace下的所有操作语句,都影响着同一个Cache,即二级缓存被多个SqlSession共享,是一个全局的变量。
当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。
参考文章:https://tech.meituan.com/2018/01/19/mybatis-cache.html
本文地址:https://blog.csdn.net/yujing1314/article/details/107469235
推荐阅读