Mybatis缓存的使用

MyBatis 中的缓存就是说 MyBatis 在执行一次SQL查询或者SQL更新之后,这条SQL语句并不会消失,而是被MyBatis 缓存起来,当再次执行相同SQL语句的时候,就会直接从缓存中进行提取,而不是再次执行SQL命令。

mybatis的缓存机制有两级:

(1)一级缓存:一级缓存mybatsi已经为我们自动开启,不用我们手动操作,而且我们是关闭不了的!!但是我们可以手动清除缓存。

 @Test                  
    public void test01(){  //mybatis的缓存 一级缓存  在二次系统的查询之间 手动清空缓存
                           //一级缓存失效  1.手动清空缓存 2.手动提交事务 3.做增删改操作
        SqlSession sqlSession1 = factory.openSession();
        SqlSession sqlSession2 = factory.openSession();

        StudentMapper mapper1 = sqlSession1.getMapper(StudentMapper.class);
        StudentMapper mapper2 = sqlSession2.getMapper(StudentMapper.class);

        List<Student> students = mapper1.selectAll();
        students.forEach(student -> System.out.println("student = " + student));

        //手动清空缓存

        System.out.println("------------------------------------------------------");
        System.out.println("------------------------------------------------------");

        students  = mapper2.selectAll();
        students.forEach(student -> System.out.println("student = " + student));
    }

一级缓存失效的情况:

1.不同的SqlSession对应不同的缓存
2.同一个SqlSession但是查询条件不同
3.同一个SqlSession执行两次相同查询之间做了增删改的操作
4.同一个SqlSession执行两次相同查询之间手动清空缓存
5.手动提交事务

(2)二级缓存:二级缓存需要我们手动开启,需要引入cacheEnabled。

<settings>
        
        <!--
			(1):开启二级缓存,这个全局的配置二级缓存
			       默认是开启的,但是还是需要写上,防止版本的更新
		-->
        <setting name="cacheEnabled" value="true"/>
    </settings>

在具体需要二级缓存的mapeer映射文件中开启二级缓存,值需要在相应的映射文件中添加一个cache标签即可

在相应的映射文件中开启二级缓存

<!-- 开启二级缓存 -->
 <cache></cache>
@Test
    public void test04(){  //mybatis 的缓存 二级缓存
        //在二次系统的查询之间 手动清空缓存
        SqlSession sqlSession1 = factory.openSession();
        SqlSession sqlSession2 = factory.openSession();

        StudentMapper mapper1 = sqlSession1.getMapper(StudentMapper.class);
        StudentMapper mapper2 = sqlSession2.getMapper(StudentMapper.class);

        List<Student> students = mapper1.selectAll();
        students.forEach(student -> System.out.println("student = " + student));

        //手动提交事务  将数据的一级缓存 写入二级缓存
        //sqlSession1.commit();
        sqlSession1.close();     //close() 写入二级缓存

        System.out.println("-------------------------------------------------------");
        System.out.println("-------------------------------------------------------");

        students  = mapper2.selectAll();
        students.forEach(student -> System.out.println("student = " + student));
    }

二级缓存失效的条件:

1.在两次查询之间进行了任意的增删改操作,一级二级缓存同时失效

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值