• Mybatis缓存


    一、缓存定义:

    • 将用户经常查询的数据放在 缓存(内存) 中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。
    • mybatis提供查询缓存,用于减轻数据库压力,提高数据库性能:
      • 一级缓存:将查询到的数据存储到SqlSession中。
      • 二级缓存:将查询到的数据存储到SqlSessionFactory中。
      • 或者集成其它第三方的缓存:比如EhCache【Java语言开发的】、Memcache【C语言开发的】等。

    二、缓存执行机制:

    • 在进行数据库访问时,首先去访问缓存,如果缓存中有要访问的数据,则直接返回客户端,如果没有则去访问数据库,在库中得到数据后,先在缓存放一份,再返回客户端。
    • mybaits提供一级缓存和二级缓存。默认开启一级缓存。
    • 一级缓存优先级高于二级缓存。
      请添加图片描述

    三、一级缓存:

    • 一级缓存使用的是SqlSession的作用域同一个sqlSession对象共享一级缓存的数据。(只要使用同一个SqlSession对象执行同一条SQL语句,就会走缓存)
    • 如果sqlSession执行commit操作(执行插入、更新、删除),则清空SqlSession一级缓存中的所有缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。
    • sqlSession.clearCache();手动清空一级缓存

    四、二级缓存

    • 二级缓存使用的是mapper的作用域,不同的sqlSession只要访问的同一个mapper.xml文件,则共享二级缓存作用域。
    • SqlSession对象关闭或提交之后,一级缓存中的数据才会被写入到二级缓存当中。此时二级缓存才可用。
    • 如果两次查询之间出现了增删改操作,且SqlSession对象关闭或提交,二级缓存就会失效
    • 二级缓存需要手动开启:SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存,并且要让实体类实现serializable接口,具体如下:
      (1)SqlMapConfig.xml中加入设置:
      在这里插入图片描述
      (2)Mapper.xml文件中二启二级缓存,使用
      在这里插入图片描述
      (3)实体类必须实现java.io.serializable接口,保证实体可序列化:
      在这里插入图片描述

    五、集成EhCache

    • 集成EhCache是为了代替Mybatis自带的二级缓存。一级缓存是无法替代的。
    • Mybatis对外提供了接口,用于集成第三方缓存组件(开源)。

    pom.xml文件添加依赖:

    
    <dependency>
      <groupId>org.mybatis.cachesgroupId>
      <artifactId>mybatis-ehcacheartifactId>
      <version>1.2.2version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    类路径下新建echcache.xml文件:

    
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
             updateCheck="false">
        
        <diskStore path="e:/ehcache"/>
      
        
        
        
        
        
        
        
        
        
        
        
        <defaultCache eternal="false" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false"
                      timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/>
    
    ehcache>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    修改Mapper.xml文件的标签:

    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    
    • 1
  • 相关阅读:
    webservice接口功能自动化测试准备工作(转)
    Python处理时空数据常用库案例及练习
    计算机毕业设计之java+ssm果蔬经营平台系统
    vue类与样式的绑定&&列表渲染
    MySQL存储引擎
    vscode通过remotessh结合xdebug远程调试php解决方案
    从react源码看hooks的原理
    【21天学习挑战赛学习打卡】顺序查找
    未来中国智能制造九大趋势
    11 SpringMVC之拦截器
  • 原文地址:https://blog.csdn.net/m0_53881899/article/details/126942643