• mybatis缓存(一,二级别)


    数据查找过程:

    • 二级缓存(默认关闭) -> 一级缓存(默认开启) -> 数据库

    一级缓存:

    • 一级缓存是SqlSession自带的。SqlSession对象被创建,一级缓存就存在了。//是针对每一个sqlSession进行缓存。
    • 如果SqlSession对象关闭或调用清理方法,会导致缓存失效。
    • 缓存底层实现就是通过HashMap实现的。
    • 一级缓存介质——内存

    如果 执行sqlsession的DML等操作,会执行commit(提交事务),最终会清空缓存(flush)。sqlSession对象销毁,一级缓存数据不存在了。sqlSession与SqlSession之间的一级缓存互相不影响。

    二级缓存:

    二级缓存是针对每个mapper相同 的namespace进行缓存每个SqlSession都会首先调用mapper下的sql语句,每个mapper缓存各自的数据(存储了查询的结果集(java对象))。
    每个SqlSession都可以访问到二级缓存中的数据(二级缓存SqlSessionFactory进行管理的),sqlsession对象销毁,mapper中的二级缓存数据仍然存在。

    • 二级缓存介质——内存,硬盘(内存不够走硬盘)
    • 二级缓存SqlSessionFactory(多个SqlSession共享)进行管理的。

    .二级缓存的原理:

    • Mybatis框架提供了Cache接口,缓存组件(比如redis)实现接口。//用redis做mybatis二级缓存:首先开启全局配置开关,然后编写cache的实现类,重写方法,然后在xxxClass的mapper文件里在<cache />标签里设置type属性,指定缓存实现类

    二级缓存配置:

    1.打开总开关: 
    在核心配置文件SqlMapConfig.xml中加入

    <!--注意顺序-->
    <setting name="cacheEnabled" value="true"/>

    2.在需要开启二级缓存的mapper.xml中加入caceh标签  <caceh/>

    3.二级缓存的POJO类实现Serializable接口

    二级缓存失效情况:

    1.在查询select标签内设置useCache="false",强制关闭二级缓存,如果要使用,得打开

    <selectid="getStuById" parameterType="Integer"resultType="Student" useCache="false">

    selectstu_id stuId,stu_name stuName from tbl_student where stu_id=#{stuId}

    </select>

    2.在执行DML操作时刷新缓存

    <updateid="updateStu"parameterType="com.atguigu.mybatis.entity.Student" flushCache="true">

    updatetbl_student set stu_name=#{stuName} where stu_id=#{stuId}

    </update>

    这是默认设置(不启动二级缓存),通常不必修改

    二级缓存使用场景:

    前提:

    1.对于查询多,DML少,实时性要求不高(缓存一般都用在这种场景)

    2.只有单表操作的表上使用二级缓存,并且所有关于这个表的操作都得在一namespace下   //其他namespace下,包含这个表的操作,那么数据不一致。比如user表,role表,userRole表,不管userRole表的查询放到user的namespace下,还是role的namespace下,user或role的表数据变更后,都会导致userRole的查询有误差

  • 相关阅读:
    RPM包校验和提取
    RPM包查询
    Find命令简介
    无法启动配置好的虚拟机
    文档发布至博客操作说明
    VMware Virtual Machine安装报错解决1
    python create home dircetory
    Centos7/Active Directory authentication using nss-pam-ldapd
    java try后面括号的作用
    vps上搭建jupyter notebook远程服务
  • 原文地址:https://www.cnblogs.com/brxHqs/p/9723822.html
Copyright © 2020-2023  润新知