一文学会如何使用mybatis的一级缓存、二级缓存

首先从它们的区别讲起,使用方面主要从spring boot的角度进行讲解。

我的mybatis版本如下:

<dependency>
     <groupId>org.mybatis.spring.boot</groupId>
     <artifactId>mybatis-spring-boot-starter</artifactId>
     <version>1.3.2</version>
</dependency>

 

作用域的区别:

一级缓存:同一sqlSession内有效。什么是同一sqlSession内,比如一个方法中调用两遍一样的查询,那么第二遍查询则会使用缓存。

二级缓存:同一namespace内有效。什么是同一namespace内,比如有一个User的实体类,针对该实体有一个UserMapper接口类及UserMapper.xml文件。那么该UserMapper.xml中的所有数据库操作视为同一namespace内。

 

spring boot中的使用区别:

一级缓存:我的版本为默认已经开启了一级缓存,但是必须开启事务的情况下才会生效。spring boot中开启事务需要在主启动类加上 @EnableTransactionManagement 注解,在service实现类加上 @Transactional 注解。

二级缓存:一、在properties或yml配置文件中添加如下配置。true表示开启mybatis二级缓存。

mybatis.configuration.cache-enabled=true
二、在mapper.xml文件中添加<cache />。

三、实体类需要实现序列化接口Serializable

 

缓存刷新机制的区别:

一级缓存:除了增删改操作会清空之外,当sqlSession结束之后一级缓存也会被清空。也就是说如果一个方法只使用了查询,但你每次访问都是一个新的sqlSession,这个时候是不会触发缓存命中的。

二级缓存:增删改操作会清空,可以通过在mapper.xml文件上配置属性来控制是否使用和是否触发清空缓存。flushCache:是否触发清空缓存;useCache:是否使用缓存。

<insert id="insert" parameterType="***" flushCache="false">

这样该insert操作将不会触发二级缓存清空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值