ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**1.全局配置** ~~~ <!--开启二级缓存--> <setting name="cacheEnabled" value="true"/> ~~~ **2.在Mapper中使用二级缓存** ~~~ <mapper namespace="com.nobb.mapper.UserMapper"> <!--标识在UserMapper中使用二级缓存--> <cache/> ~~~ **3.实体继承 可序列化** ~~~ public class User implements Serializable { ~~~ **4.测试代码** ~~~ @Test public void fun4(){ UserMapper userMapper = session.getMapper(UserMapper.class); //第一次查询,二级缓存未命中,查询数据库,并放入二级缓存.会发送sql User u1 = userMapper.findById(15); //执行了commit的操作才会计入二级缓存 session.commit(); //session关闭,对应的一级缓存失效.二级缓存仍然有效 session.close(); //开启新的 session = SqlSessionUtils.openSession(); userMapper = session.getMapper(UserMapper.class); //二级缓存存在查询结果,再次查询将直接从二级缓存中获得结果,不会发送sql User u2 = userMapper.findById(15); System.out.println(u1); System.out.println(u2); } ~~~ 缓存是以namespace为单位.不同的namespace下的操作不互相影响. 出现update操作(insert,update,delete)会清空namespace下的二级缓存数据 多表操作一般不建议使用二级缓存,因为会产生脏数据.(可以使用cache-ref缓解) 不建议使用二级缓存,更推荐其他的专业缓存产品,例如Redis.