Mybatis缓存(一级缓存、二级缓存和自定义缓存)

简要说明:

1、Mybatis缓存分为一级缓存和二级缓存。在没有配置的情况下,默认开启一级缓存,不开启二级缓存。

2、如果配置开启二级缓存,会先查询二级缓存,没有的话再查询一级缓存。(原理

(如果是springboot项目,默认mybatis.configuration.cache-enabled的值是true,也就是默认开启Mybatis的二级缓存的,但也需要相应的配置才能使用二级缓存)

 

一级缓存(同一个SqlSession)

一级缓存具有和sqlsession一样的生命周期,SqlSession相当于一个JDBC的Connection对象,在一次请求事务会话后,我们将其关闭。

import com.boot.mybatis.dao.UserMapper;
import com.boot.mybatis.po.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;


/**
 * @author river
 * 2020/2/11
 */
@SpringBootTest
class MybatisCacheTest {

    @Autowired
    SqlSessionFactory sqlSessionFactory;

    @Test
    void theSameSqlSession() {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {//在try()中的资源会自动释放
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            //查询结果会缓存起来,如果不希望缓存这个查询结果,可以在<select>中加上flushCache="true",或者任何的update, insert, delete语句都会清空此缓存。
            User user1 = userMapper.selectByPrimaryKey(1);
            //下面不会查询数据库,第一次查询的结果缓存在sqlSession一级缓存中
            User user2 = userMapper.selectByPrimaryKey(1);
            assertEquals(user1, user2);//同一个User对象,地址相同
        }
    }

    @Test
    void notTheSameSqlSession(){
        SqlSession sqlSession2 = null;
        try (SqlSession sqlSession1 = sqlSessionFactory.openSession()) {
            UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
            //查询结果会缓存到sqlSession1中
            User user1 = userMapper1.selectByPrimaryKey(1);
            sqlSession1.commit();//一定要提交,不然不会进入二级缓存
            sqlSession2 = sqlSessionFactory.openSession();
            UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
            //sqlSession2中没有缓存此查询,所以会查询数据库(没有配置
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值