mybatis-测试二级缓存
1.在mybatis-config.xml中开启二级缓存
<setting name="cacheEnabled" value="true"/>
2.在Mapper.xml中需要设置二级缓存的namespace中添加cache标签
<cache/>
2.1也可以在cache标签中对二级缓存进行配置
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者 产生冲突。
3.测试
3.1测试
@Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); UserMapper mapper1 = sqlSession.getMapper(UserMapper.class); User user = mapper.queryUserById(1); User user2 = mapper1.queryUserById(1); System.out.println(user); System.out.println("=================================================="); System.out.println(user2); System.out.println(user == user2); sqlSession.close(); }
3.2执行异常
原因:写入的对象没有序列化,实例类需要实现Serializable接口
@Data @AllArgsConstructor @NoArgsConstructor public class User implements Serializable { private int id; private String name; private String pwd; }
3.3再次执行结果分析
只查询了一次数据库,并且两次查询返回的对象相同,说明第二次是在缓存中查询的,说明二级缓存的作用域大于一级缓存,即便是两个不同的sqlSession缓存也能生效
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术