查询缓存
一级缓存是按session级别的,每一个sqlSession操作一个HashMap 互不影响。
二级缓存是mapper级别的,多个sqlSession操作一个二级缓存。
1 、一级缓存
工作原理:
mybatis默认支持一级缓存,不需要去配置。
2、二级缓存
以mapper(namespace)为标识,如果调用mapper的方法去查询出结果,那么就会在缓存中存入,那么同一个mapper的另外的方法查询的话,就不用执行数据库了。
2.1 开启缓存
第一步:核心配置文件中开启(默认开启)
第二步:在mapper.xml表示要使用二级缓存
2.2 将pojo类序列化
目的是为了将缓存数据取出执行反序列化,因为二级缓存的存储介质多种多样。
2.3 测试一下
close()之后才会把数据加入缓存
效果是:跨不同的session也使用同一个缓存。不过在commit之后会清空缓存。
2.4 二级缓存的参数设置
2.4.1 禁用二级缓存
当业务变动频繁,或者每次数据要求最新的,例如用户信息。那么就可以把在它的sql语句禁用。
<select id="findOrderListResultMap" .....useCache="false">
3、mybatis整合外部缓存框架
分布式缓存:当服务器进行分布式部署(集群)时,服务器上的缓存要求集中管理,redis、memached、chcache。
3.1 整合方法
第一步:cache实现类(调用外部框架的结果)
mybatis提供了cache接口,可以对照着这个默认实现类进行改写。
第二步:设定
4、缓存的应用场景
统计分析、账单统计等耗时和实时性不高的业务,可使用二级缓存。
通过设置刷新间隔时间,去调整清空的频率。
局限性:每一次commit都会情况整个mapper的缓存,它没法做到只针对一个数据进行刷新。需要在业务层的缓存进行调优