mybatis缓存
- 一级缓存
虽然一级缓存是自动开启的,但是和spring整合后就会出现问题。
如果已经和spring整合了,mybatis的一级缓存就会失效,因为spring会自动关闭session,所以一级缓存比较鸡肋。
- 二级缓存
如果需要使用二级缓存,在mapper上加@CacheNamespace
但是这种二级缓存同样也存在问题:
- 如果查询和修改一个表中数据的方法不在一个mapper类中,在修改前查询并且在修改后查询时会发现查询出来的数据没有被修改,但是实际上数据库中的数据已经被修改了。
- 但是如果查询和修改一个表中数据的方法在一个mapper类中,就不会发生上面的问题。
这是因为二级缓存的存储是有命名空间的,这个命名空间的名字就是类全名,不同的命名空间的缓存是有隔离的。
所以在更新缓存的数据时只会更新同一命令名空间的数据,查询出来的数据也是存储在自己的命名空间的缓存中。
所以mybatis的二级缓存也没什么用,通常会使用第三方框架缓存
spring mybatis一级缓存失效的具体分析
mybatis和spring整合后以