MyBatis缓存

MyBatis 是dao层的框架

缓存是为了提高查询效率

每次查询会先从缓存区域找,如果找不到从数据库查询,查询到数据将数据写入缓存。

Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句,value为从查询出来映射生成的java对象。

一级缓存

作用域是同一个SqlSession

线程安全的 默认开启 无法关闭

Mybatis 执行增删改会先清空缓存。这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

脏读:缓存数据与数据库数据不一致 所以mybatis先清缓存 再查询数据库中的信息。


一级缓存在一个sqlSession会话里面的所有查询操作都会保存到缓存中

二级缓存

作用域是mapper的同一个namespace

基于sqlSessionFactory的缓存 全局共享

开启二级缓存

在实际开发中使用第三方缓存组件 Ehchache Redis

1.在核心配置文件mybatis-config.xml中加入

<setting name="cacheEnabled" value="true"/>

2.只有某个mapper文件开启二级缓存

<cache />

3. 实体类要实现序列化

二级缓存需要查询结果映射的pojo对象实现java.io.Serializable接口实现序列化和反序列化操作.

public class User implements Serializable

禁用二级缓存

在statement中设置useCache=false

面试题简答:说一下Mybatis的一级缓存和二级缓存

关键点:

        1. 一级缓存是session级别的缓存,默认开启,当查询一次数据库时,对查询结果进行缓存,如果之后的查询在一级缓存中存在,则无需再访问数据库;

      

        2. 二级缓存是sessionFactory级别的缓存,需要配置才会开启。当进行sql语句查询时,先查看二级缓存,如果不存在,访问一级缓存,降低数据库访问压力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值