mybatis 缓存

加快查找

一、一级缓存(sqlSession)

失去缓存的情况

1、查询不同的语句

2、增删改操作,可能会改变原来的数据,所以缓存必定刷新

3、查询不同的Mapper.xml

4、手动清理缓存

sqlSession.clearCache();

注意:一级缓存默认开启,而且去不掉,在sqlSession中

二、二级缓存

</mapper>

xml映射文件的namespace对应一个二级缓存

工作机制

a、一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中

b、如果当前会话关闭了,这个会话对应的一级缓存就没了;将缓存丢到二级缓存(开启二级缓存的情况)

c、新的会话查询信息,就可以从二级缓存中获取内容

d、不同的mapper查出的数据会放在自己的缓存map中

官网 https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache

1、开启全局缓存(二级缓存)

cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true

 默认为True,不过仍要写

<setting name="cacheEnabled " value="true"/>

2、开启缓存

在xml映射文件中添加 <cache/>

查询语句useCache开启或关闭缓存

flushCache="true" 刷新缓存
<mapper namespace="com.wt.dao.BlogMapper">
    <cache/>
    <select id="getBlog" resultType="blog" useCache="true">
     select  * from blog
 </select>

3、问题

使用二级缓存需要将实体类序列化

package com.wt.pojo;


import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class Blog  implements Serializable {
    private String id;
    private String title;
    private String author;
    private Date create_time;
    private int views;
}

小结

二级缓存在同一个Mapper中

所有的数据先放到一级缓存

当前session commit 或 close 时 才会到二级缓存

 

posted @ 2020-07-18 15:12  市丸银  阅读(92)  评论(0编辑  收藏  举报