• MyBatis缓存


    一、一级缓存

      1.一级缓存真是存在

       2.一级缓存的依据是ID+SQL字句 

    ·   3.增删改会清空一级缓存

      一级缓存案例:

        一级缓存Test测试类

    @Test
        public void test5(){
            SmbmsRoleEntity allByRoleId = providerTest.getAllByRoleId(3);
            System.out.println(allByRoleId.getRoleName());
    
            //使用同一个SQLSession发送 相同发的SQL并且执行大的是同一个ID
            //增删改:都会清空一级缓存
    
    
            System.out.println("=========================");
            SmbmsRoleEntity allByRoleId2 = providerTest.getAllByRoleId(3);
            System.out.println(allByRoleId2.getRoleName());
        }

       一级缓存结果

        使用同一SqlSession向数据库发送相同的请求时,第一条 会请求数据库发送SQL其余的不会请求数据库直接从缓存中拿数据

       增删改对一级缓存的影响Test测试类

    @Test
        public void test5(){
            SmbmsRoleEntity allByRoleId = providerTest.getAllByRoleId(3);
            System.out.println(allByRoleId.getRoleName());
    
            //使用同一个SQLSession发送 相同发的SQL并且执行的是同一个ID
            //增删改:都会清空一级缓存
    System.out.println("=============修改============="); int upda = providerTest.upda("普通用户", 3); System.out.println("========================="); SmbmsRoleEntity allByRoleId2 = providerTest.getAllByRoleId(3); System.out.println(allByRoleId2.getRoleName()); }

       增删改对一级缓存的影响结果 

        一级缓存在 增删改情况下,无论是否提交事务,都会重新执行数据库擦查询(清空缓存)

      

    二、二级缓存

      

    • 二级缓存不比一级缓存,需要在configuration.xml中手动开启。
    • 二级缓存是全局应用级别的缓存,即使关闭了session仍能使用。
    • 如果一个select标签想要局部关闭二级缓存,需要设置useCache=false
    • 二级缓存不能使用注解方法配置
    • 如果在执行增删改操作的过程中不刷新缓存,须设置flushCache=false

      1.二级缓存不比一级缓存,需要在mybatis-.xml中手动开启

            <!--开启二级缓存-->
            <setting name="cacheEnabled" value="true"/>

      2.在小配置文件中配置cache节点

         <cache/>

       3.在使用到的实体类中实现Serializable接口

      


      二级缓存测试类
    @Test
        public void test5(){
            SmbmsRoleEntity allByRoleId = providerTest.getAllByRoleId(3);
            System.out.println(allByRoleId.getRoleName());
    
            //使用同一个SQLSession发送 相同发的SQL并且执行大的是同一个ID
            //增删改:都会清空一级缓存
    
            System.out.println("=============修改=============");
            int upda = providerTest.upda("普通用户", 3);
    
            System.out.println("=========================");
            SmbmsRoleEntity allByRoleId2 = providerTest.getAllByRoleId(3);
            System.out.println(allByRoleId2.getRoleName());
        }

      二级测试类控制台

      二级缓存在增删改情况下,如果提交事务则会清空缓存,重新查询,如果不提交事务,则获取缓存数据

        

  • 相关阅读:
    spring MVC的启动过程详解
    BeanFactory和applicationContext之间的区别
    spring的事务管理
    通用Mybatis的Crud搭建
    spring的IOC原理
    spring的AOP原理
    TortoiseSVN使用简介
    SVN简明教程
    POJO
    velocity 框架
  • 原文地址:https://www.cnblogs.com/szhhhh/p/11671884.html
Copyright © 2020-2023  润新知