MyBatis的一级缓存

基本介绍

mybatis的一级缓存是SqlSession级别的缓存,只能在一个SqlSession声明周期内可以通过缓存获取其中的数据,即从openSession到close之间都是可以通过缓存获取数据的(前提,之前获取过一次)

注意事项

缓存的清空

当在sqlSesison的生命周期中,使用了commit操做,那么SqlSession级别的一级缓存的数据就会被删除,哪怕提交的时候并没有进行对数据进行任何的修改,因为这样可以防止读取到脏数据

缓存的原理

缓存的时候,使用一个map将已查询的数据存放进内存中,map的key是根据sql语句进行创建的
MyBatis的一级缓存

实验

可以从SqlSession级别获取缓存的条件

MyBatis认为,对于两次查询,如果以下条件都完全一样,那么就认为它们是完全相同的两次查询:
1. 传入的 statementId
2. 查询时要求的结果集中的结果范围 (结果的范围通过rowBounds.offset和rowBounds.limit表示);
3. 这次查询所产生的最终要传递给JDBC Java.sql.Preparedstatement的Sql语句字符串(boundSql.getSql() )
4. 传递给java.sql.Statement要设置的参数值
MyBatis的一级缓存

只要进行了commit操作那么必然会导致SqlSesiosn级别的缓存被清空

MyBatis的一级缓存

总结SqlSesiosn的一级缓存的调用过程

MyBatis的一级缓存