MyBatis的查询缓存

什么是查询缓存?查询缓存的作用?

Mybatis提供查询缓存,在特定条件下使用相同的语句查询数据库,为了减少数据库的连接次数,减小数据库的访问压力以及提高查询效率,MyBatis不会重新查询数据库,而是选择从缓存中拿出相应的结果。MyBatis提供一级查询缓存和二级查询缓存,也允许使用其他缓存。


MyBatis一级查询缓存

作用域:SqlSession

默认设置:在MyBatis中,一级查询缓存默认开启,且不能关闭。

实现方法

使用一个HashMap实现一级查询缓存

key:HashCode+sql语句的ID+sql语句

 

value:该sql语句第一次查询获得的结果

 

清空时机

1.SqlSession关闭时,一级查询缓存清空

2.当对数据库进行了增删改的操作时,为了保证之后查询结果的正确性,一级查询缓存清空


MyBatis二级查询缓存

作用域:整个应用

使用二级查询缓存的步骤:

1.查询结果映射的pojo对象需要实现序列化即实现 Serializable接口,若该类有父类,父类也必须实现该接口。

2.在mapper映射文件中添加<cache/>标签

3.在主配置文件中添加设定,可以省略,因为二级查询缓存默认开启

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

实现方法与一级查询缓存类似,二级查询缓存不是为了共享对象的信息,而是为了延长缓存信息的生命周期,提高效率、

清空时机:

1.应用关闭时

2.对数据库进行了增删改查操作

 

二级查询缓存的关闭

1.全局关闭,即整个项目不使用二级查询缓存

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

2.局部关闭,只关闭某个select标签的二级查询缓存

将select标签中的useCache属性改为false

什么时候使用开启二级查询缓存?

当查询操作明显频繁与增删改操作时,并且只允许在单表中使用二级查询缓存,只能在一个命名空间中使用二级缓存。

 

 

 

 

MyBatis提供了查询缓存来减少数据库访问次数,提高性能。查询缓存是将查询结果缓存起来,当下次相同的查询被执行时,直接从缓存获取结果,而不再访问数据库。 要启用查询缓存,需要在MyBatis配置文件进行相关配置。以下是一些相关的配置选项: 1. `<setting name="cacheEnabled" value="true" />`:开启全局的二级缓存,默认为true。 2. `<mapper namespace="com.example.mapper" flushCache="true">`:在mapper配置flushCache属性为true,表示刷新缓存,使其失效。 3. `<select id="selectUser" resultType="com.example.User" useCache="true">`:在查询语句配置useCache属性为true,表示使用查询缓存。 默认情况下,MyBatis使用PerpetualCache作为二级缓存的实现,它是一个基于HashMap的缓存实现。MyBatis还支持其他的缓存实现,如Ehcache、Redis等。 需要注意的是,查询缓存是基于查询语句的完全匹配来判断是否使用缓存的。如果有任何一个参数发生变化,即使是相同的SQL语句,也会重新查询数据库而不使用缓存。 另外,MyBatis还提供了一级缓存,默认开启且无法关闭。一级缓存是基于SqlSession的,它的生命周期与SqlSession的生命周期一致,可以通过清除缓存的方式来使其失效。 总的来说,MyBatis查询缓存是一个简单但有效的机制,可以显著提高查询性能,减少数据库访问次数。但需要注意合理配置缓存策略,避免缓存过期或占用过多内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值