Mybatis一二级缓存

一级缓存:

  一级缓存作用域是sqlsession,一级缓存默认是开启的,同一个事务中的查询用的是同一个sqlsession,如果不加事务,那么每次查询都是用的新的sqlsession.

 

 

 

 在不开启事务时三次查询创建了三次sqlsession

 

 

 

 加了事务后三次查询只有第一次创建了sqlsession,后面的查询用的都是第一次的sqlsession

 

二级缓存 二级缓存是mapper级别的,Mybatis默认是没有开启二级缓存的。 第一次调用mapper下的SQL去查询用户的信息,查询到的信息会存放代该mapper对应的二级缓存区域。 第二次调用namespace下的mapper映射文件中,相同的sql去查询用户信息,会去对应的二级缓存内取结果。
同一个sqlsession两次查询操作如果中间有增删改语句就会清空一级缓存,那么第二次查询就不会从缓存取数。

开启二级缓存需要的操作:sql语句返回的实体类必须实现Serializable接口,mapper文件添加<cache/>标签,service层第一次用sqlsession执行查询语句后添加sqlsession.commit()将一级缓存提交到二级缓存中,后面的查询语句才能从二级缓存中获取数据。

posted @ 2021-06-02 14:02  杨吃羊  阅读(59)  评论(0)    收藏  举报