Mybatis的一级缓存: SqlSession将 查询语句 查到的数据保存到缓存中,相同的sql语句与参数会直接去缓存中读取,增删改会清除缓存
Mybatis的二级缓存:以 namespace 为标识建立缓存,同一namespace下,相同的sql语句与参数会直接去缓存中读取,增删改会清除缓存
注意:但是不建议使用Mybatis的二级缓存。
举例:mapperA是由namespaceA管理的,mapperB是由namespaceB管理的,这两个mappper都操作了表user,如果两个namespace都已经存在查询user结果的二级缓存,当mapperA对user表进行了insert、update、delete操作时,会把namespaceA的二级缓存清掉,但是namespaceB还存在着二级缓存,如果此时namespaceB的二级缓存被调走了,那么就会出现数据脏读。
解决:
优化
相关问题
mybatis让没有结果的查询也缓存一个null值
让各种缓存的超时时间错开