• Java第三十七天,Mybatis框架系列,缓存


    一、什么是缓存

    存在于内存中的临时数据

    二、Mybatis 中的缓存的优点

    通过缓存策略来减少数据库的查询次数,从而提高性能。Mybatis 中缓存分为一级缓存、二级缓存

    三、缓存的适用情况

    1.适用:

    • 经常查询且不经常改变的数据
    • 数据的正确与否对最终结果影响不大的数据

    2.不适用:

    • 经常改变的数据
    • 关键结果严重依赖缓存准确性的数据

    四、一级缓存

    一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在

    User user1 = userDao.findById(1);
    User user2 = userDao.findById(1);
    System.out.println(user1);
    System.out.println(user2);
    System.out.println(user1 == user2); ===> true
    
    
    程序说明mybatis 运用了缓存技术
    User user1 = userDao.findById(1);
    System.out.println(user1);
    
    
    // 清空缓存方法一
    sqlSession.close();
    
    // 清空缓存方法二
    sqlSession = factory.openSession();
    
    // 清空缓存方法三
    sqlSession.clearCache();
    
    // 执行数据库的更新语句
    update ......
    
    注意:
    一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除, commit(), close()等方法时,就会清空一级缓存
    
    User user2 = userDao.findById(1);
    System.out.println(user2);
    
    System.out.println(user1 == user2); ===> false

    五、二级缓存

    1.定义

    二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的

    2.本质

    二级缓存指的是 Mvbatis中sqlSessionFactorv对象的缓存。由同一个 SqlSessionFactory对象创建的 Sqlsession共享其缓存

    3.适用二级缓存的步骤

    第一步:在 SqlMapConfig.xml 文件开启二级缓存

    <settings>
        <!-- 开启二级缓存的支持 -->
        <setting name="cacheEnabled" value="true"/>
    </settings>

    第二步:配置相关的 Mapper 映射文件

    <cache>标签表示当前这个 mapper 映射将使用二级缓存,区分的标准就看 mapper 的 namespace 值。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.itheima.dao.IUserDao">
        <!-- 开启二级缓存的支持 -->
        <cache></cache>
    </mapper>

    第三步: 配置 statement 上面的 useCache 属性

    <!-- 根据 id 查询 -->
    <select id="" resultType="" parameterType="" useCache="true">
        select * from ...... where ......
    </select>
    
    
    注意
    1.将 UserDao.xml 映射文件中的<select>标签中设置 useCache=”true”代表当前这个 statement 要使用
    二级缓存,如果不使用二级缓存可以设置为 false
    2.针对每次查询都需要最新的数据 sql,要设置成 useCache=false,禁用二级缓存。

    4.二级缓存注意事项

    • 当我们在使用二级缓存时,所缓存的类一定要实现 java.io.Serializable 接口,这种就可以使用序列化方式来保存对象
    • 二级缓存存储的数据,而不是对象
       
    作者:蓝月

    -------------------------------------------

    个性签名:能我之人何其多,戒骄戒躁,脚踏实地地走好每一步

  • 相关阅读:
    2016.5.11_经典试题-回文算法【ABAP】
    shell基础知识
    python笔记2
    python笔记1
    vmware rdm
    网页中图片显示方向与实际图片方向不一致
    vue 弹性布局 实现长图垂直居上,短图垂直居中
    IE10 解决input file 同一文件不触发onchange事件
    04. pt-deadlock-logger
    03. pt-config-diff
  • 原文地址:https://www.cnblogs.com/viplanyue/p/13573699.html
Copyright © 2020-2023  润新知