zoukankan      html  css  js  c++  java
  • mybatis 缓存

    加快查找

    一、一级缓存(sqlSession)

    失去缓存的情况

    1、查询不同的语句

    2、增删改操作,可能会改变原来的数据,所以缓存必定刷新

    3、查询不同的Mapper.xml

    4、手动清理缓存

    sqlSession.clearCache();

    注意:一级缓存默认开启,而且去不掉,在sqlSession中

    二、二级缓存

    </mapper>

    xml映射文件的namespace对应一个二级缓存

    工作机制

    a、一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中

    b、如果当前会话关闭了,这个会话对应的一级缓存就没了;将缓存丢到二级缓存(开启二级缓存的情况)

    c、新的会话查询信息,就可以从二级缓存中获取内容

    d、不同的mapper查出的数据会放在自己的缓存map中

    官网 https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache

    1、开启全局缓存(二级缓存)

    cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true

     默认为True,不过仍要写

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

    2、开启缓存

    在xml映射文件中添加 <cache/>

    查询语句useCache开启或关闭缓存

    flushCache="true" 刷新缓存
    <mapper namespace="com.wt.dao.BlogMapper">
        <cache/>
        <select id="getBlog" resultType="blog" useCache="true">
         select  * from blog
     </select>
    

    3、问题

    使用二级缓存需要将实体类序列化

    package com.wt.pojo;
    
    
    import lombok.Data;
    
    import java.io.Serializable;
    import java.util.Date;
    
    @Data
    public class Blog  implements Serializable {
        private String id;
        private String title;
        private String author;
        private Date create_time;
        private int views;
    }

    小结

    二级缓存在同一个Mapper中

    所有的数据先放到一级缓存

    当前session commit 或 close 时 才会到二级缓存

  • 相关阅读:
    TP5.1 分页CSS样式(转载)
    简单的layui二级联动
    关于layui部分表单不显示的问题(Select, checkBox)
    MySQL 开启远程访问权限 | 宝塔系统
    tp5.1 本地正常, 线上route.php不起作用的问题
    cocos自动图集
    微信小程序video
    nuxt https
    接口数据加密
    node里读取命令行参数
  • 原文地址:https://www.cnblogs.com/wt7018/p/13335846.html
Copyright © 2011-2022 走看看