建设银行手机版官方网站下载,公司网站建设任务书,北京培训机构,WordPress添加内容评论可见MyBatis的三级缓存
一、什么是MyBatis的三级缓存#xff1f;
MyBatis的三级缓存指的是一级缓存、二级缓存和三级缓存。
缓存是一种提高数据读取性能的技术#xff0c;在MyBatis中#xff0c;一级缓存指的是Session缓存#xff0c;二级缓存指的是Mapper级的缓存#xff…MyBatis的三级缓存
一、什么是MyBatis的三级缓存
MyBatis的三级缓存指的是一级缓存、二级缓存和三级缓存。
缓存是一种提高数据读取性能的技术在MyBatis中一级缓存指的是Session缓存二级缓存指的是Mapper级的缓存三级缓存则是全局的对所有的mapper有效的缓存。
通过缓存我们可以避免频繁地对数据库进行查询从而提高应用程序的性能。
二、一级缓存
一级缓存是MyBatis的核心缓存是SqlSession级别的这意味着只要在同一个SqlSession中相同的查询就会从缓存中取得结果。
看下面的示例代码
SqlSession session factory.openSession();
UserMapper mapper session.getMapper(UserMapper.class);
User user1 mapper.selectById(1);
User user2 mapper.selectById(1);
System.out.println(user1 user2);同一个SqlSession内,重复查询一次发现并没有执行查询操作,返回的两个对象完全相同。
三、二级缓存
二级缓存是Mapper级的缓存这种缓存对于同一个namespace下的所有SqlSession都是有效的。
cache/只需要在mapper.xml中添加此配置MyBatis就会在这个namespace下启用二级缓存。
二级缓存的测试代码如下
SqlSession session1 factory.openSession();
UserMapper mapper1 session1.getMapper(UserMapper.class);
User user1 mapper1.selectById(1);
session1.close();SqlSession session2 factory.openSession();
UserMapper mapper2 session2.getMapper(UserMapper.class);
User user2 mapper2.selectById(1);
session2.close();System.out.println(user1 user2);可以看到虽然是两个SqlSession,但是由于启用了二级缓存所以相同的查询只执行了一次。
四、三级缓存
三级缓存是全局缓存对所有的mapper都有效。MyBatis并未直接提供接口支持全局缓存但是可以通过整合EhcacheRedis等工具来实现。
!-- ehcache.xml --
cache nameUsermaxElementsInMemory10000eternalfalsetimeToIdleSeconds120timeToLiveSeconds120overflowToDiskfalsememoryStoreEvictionPolicyLRU/
!--在ehcache中配置该缓存--关于三级缓存的具体实现和使用可以参考官方文档和相关资料。
总结
通过MyBatis的三级缓存可以大大提高我们对数据库的查询效率但是也需要注意缓存也可能会导致脏读、幻读等问题这些都需要在实际开发中去考虑和权衡。
MyBatis 的一级缓存 二级缓存 都不建议使用它们只适用于单体项目现在基本都是分布式或者微服务 框架使用的话会存在数据不一致问题。 在我开发这几年用的都是微服务架构。也没用过Mybatis的缓存也不够灵活都是手动在代码中做的redis缓存。手动在代码中做redis缓存我觉得更灵活。