首页 > 其他 > 详细

mybatis-缓存

时间:2021-04-24 22:28:22      阅读:42      评论:0      收藏:0      [点我收藏+]

用户先查询二级缓存,如果没有二级缓存就去看有没有一级缓存,如果都没有再去数据库中查询

  • 映射语句文件中的所有 select 语句的结果将会被缓存。
  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
  • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。
  • 缓存不会定时进行刷新(也就是说,没有刷新间隔)。
  • 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。
  • 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

一级缓存:SqlSession

MyTest.java

package dao;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.MybatisUtils;

public class MyTest {
    @Test
    public void quertTest()
    {
        SqlSession sqlSession= MybatisUtils.getSqlSession();
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        User user=new User();
        user=userMapper.queryUser(2);
        System.out.println(user);
        System.out.println("==========================");
        User user2=new User(3,"苗迪","3");
        userMapper.updateUser(user2);


        System.out.println("==========================");
        User user1=new User();
        user1=userMapper.queryUser(2);
        System.out.println(user1);
        //System.out.println(user==user1);
        sqlSession.close();
    }
}

 

技术分享图片

 

 

 技术分享图片

 

 

 

========================================================================================

技术分享图片

 

 

 技术分享图片

 

 

 

 

上面四个截图解释验证了select时再次查询同一个可以直接调用缓存,如果增删改了之后缓存就会刷新。

 

sqlSession.clearCache();//手动清理缓存
手动清理缓存之后的效果是这样的

技术分享图片

 

 

 

一级缓存是默认开启的,只在一次SqlSession中有效

 

=====================================================================================================================================================================================

二级缓存

 

  步骤:

      1、开启缓存

          <settings>         

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

          </settings>

      2、

        <!--在当前mapper中开启二级缓存-->
        <cache
          eviction="FIFO"
          flushInterval="60000"
          size="512"
          readOnly="true"/>

      3、提示 二级缓存是事务性的。这意味着,当 SqlSession 完成并提交时,或是完成并回滚,但没有执行 flushCache=true 的 insert/delete/update 语句时,缓存会获得更新。

        通俗的讲:就是当上一个事务完毕之后sqlSession.close();然后二级缓存就会打开(如同通知使用两个SqlSession且在第一个没有关闭的情况下,第二个是不会使用第一个的缓存的,因为二级缓存没有开启)

        技术分享图片

 

         技术分享图片

 

         技术分享图片

 

mybatis-缓存

原文:https://www.cnblogs.com/yizhixiaozhu/p/14697839.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!