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 时 才会到二级缓存

  • 相关阅读:
    算法笔记 #003# 堆排序
    算法导论(第三版)练习 6.2-1 ~ 6.2-6
    Python开发【第六篇】:模块
    Python开发【第五篇】:Python基础之杂货铺
    Python开发【第四篇】:Python基础之函数
    Python开发【第三篇】:Python基本数据类型
    Python开发【第二篇】:初识Python
    python mysql
    跟着ttlsa一起学zabbix监控呗
    zabbix进程构成
  • 原文地址:https://www.cnblogs.com/wt7018/p/13335846.html
Copyright © 2011-2022 走看看