MyBatis缓存

时间:2019-10-14
本文章向大家介绍MyBatis缓存,主要包括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());
    }

  二级测试类控制台

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

    

原文地址:https://www.cnblogs.com/1314Justin/p/11671884.html