• mybatis-缓存


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

    • 映射语句文件中的所有 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且在第一个没有关闭的情况下,第二个是不会使用第一个的缓存的,因为二级缓存没有开启)

            

             

             

  • 相关阅读:
    SpringMVC + Spring + MyBatis 学习笔记:遭遇order by 排序问题
    SpringMVC + Spring + MyBatis 学习笔记:SpringMVC和Spring一同工作的时候,AOP事务管理不起作用的解决方法
    SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法
    SpringMVC + Spring + MyBatis 学习笔记:为MyBatis增加打印SQL功能 (最简化配置)
    [转]大部分人努力程度之低,根本轮不到拼天赋
    String内存陷阱简介
    同为程序员 为什么我的工资最低
    在程序员的眼里,用户是这样使用他们开发的软件的
    POI怎么和项目结合起来使用
    uploadify
  • 原文地址:https://www.cnblogs.com/yizhixiaozhu/p/14697839.html
Copyright © 2020-2023  润新知