MyBatis中二级缓存和其失效的一种情况
MyBatis的二级缓存(实现需要4个条件)
* MyBatis的一级缓存是SqlSessionFactory级别的,
* 即通过同一个SqlSessionFactory所获取的SqlSession对象
* 查询的数据会被缓存,在通过同一个SqlSessionFactory所获取的SqlSession
* 来查询相同的数据时,会从缓存中获取
* MyBatis开启的条件:
* 1>在核心配置文件中,设置全局配置属性cacheEnabled="true",默认为true,不需要设置
开启二级缓存 默认值就为true 不需要手动开启
<setting name="cacheEnabled" value="true"/>
* 2>在映射文件中设置标签<cache/>
<cache/>
* 3>二级缓存必须在SqlSession关闭或提交之后有效
sqlSession.close();
* 4>查询的数据所转换的实体类类型必须实现序列化的接口
implements Serializable
例子
@Test
public void testCache() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
CacheMapper mapper = sqlSession.getMapper(CacheMapper.class);
Emp emp = mapper.getEmpById(1);
System.out.println(emp);
sqlSession.close();
SqlSession sqlSession1 = sqlSessionFactory.openSession(true);
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpById(1);
System.out.println(emp1);
sqlSession1.close();
}
}
* 使二级缓存失效的原因只有一个
* 两次查询中间执行了增删改,会使一级二级缓存同时失效
(sqlSession.clearCache();不会将二级缓存清空,是专门来清理一级缓存的)
分类:
MyBatis学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)