-
一级缓存类图:
蓝色框为MyBatis定义的接口。
绿色框为实现一种装饰模式。
结论:MyBatis一级缓存存储的实际上是Map数据结构。
查看全部 -
事务隔离级别
结论:MyBatis以及缓存反而提升了事务隔离级别。
查看全部 -
同一种情况,数据库事务发生不可重复读,MyBatis的情况。
MyBatis解决了数据库事务不可重复读的问题。
查看全部 -
数据库事务的不可重复读:
不可重复读:在事务1期间事务2更新了数据,导致事务1两次查询解雇偶不一致。简称,读提交。
查看全部 -
同一种情况,数据库事务脏读和MyBatis脏读情况对比
MyBatis解决了数据库事务脏读的问题。
查看全部 -
数据库事务的脏读(不带MaBatis缓存):
脏读:事务1读取了事务2已经修改但尚未提交的数据,如果事务2发生回滚则事务1读取的数据就错误数据,也称脏数据。简称,读未提交。
查看全部 -
注意:由于关闭关闭Session、执行Commit、执行Rollback都会清空MyBatis的一级缓存,所以实际上 MyBatis一级缓存的生命周期是在数据库事务的生命周期之内的。
查看全部 -
网传MyBatis一级缓存的脏读 示例(实际不会发生)
查看全部 -
clearCache主动清楚
在执行SqlSession.clearCache()之后,缓存会被清空,第二次查询会查询库。
查看全部 -
update更新
在执行insert、update、delete操作之后,缓存会被清空,第二次查询会查询数据库。
注意:与表无关。即使我们要查询的和要更新的表不是同一张表,MyBatis依然会清空所有的一级缓存。
查看全部 -
rollback回滚
在执行SqlSession.rollback()之后,缓存会被清空,第二次查询会查询数据库。
查看全部 -
commit提交
在执行SqlSession.commit()之后,缓存会被清空,第二次查询会查询数据库。
查看全部 -
关闭Session的代码类图
通过反射,验证了关闭Session的时候确实是会清空缓存。
查看全部 -
MyBatis产生缓存,实际是通过图中的方法
查看全部 -
课程总结
MyBatis通过以下五种条件判断某两次查询时完全相同的查询:
StatementID、查询参数、分页参数、SQL语句、环境
查看全部
举报