Mybatis框架的缓存

Mybatis框架的缓存

一.为什么使用缓存

缓存(cache)的作用是为了减去数据库的压力,提高查询性能。缓存实现的 原理是从数据库中查询出来的对象在使用完后不要销毁,而是存储在内存(缓存) 中,当再次需要获取该对象时,直接从内存(缓存)中直接获取,不再向数据库 执行select语句,从而减少了对数据库的查询次数,因此提高了数据库的性能。

二.缓存类型

Mybatis 有一级缓存和二级缓存。一级缓存的作用域是同一个SqlSession, 在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库 中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查 询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存 也就不存在了。Mybatis默认开启一级缓存。 二级缓存是多个SqlSession共享的,其作用域是同一个namespace,不同的 sqlSession 两次执行相同namespace下的sql语句且向sql中传递参数也相同 即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存 (内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。 Mybatis 默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

三.缓存的使用

1.一级缓存:

Mybatis 对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓 存,一级缓存只是相对于同一个SqlSession而言。 所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调 用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询 后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新, 并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再 次发送SQL到数据库。

工作模式:

2.二级缓存:

二级缓存是SqlSessionFactory级别的,根据mapper的namespace划分 区域的,相同namespace的mapper查询的数据缓存在同一个区域,如果使 用mapper代理方法每个mapper的namespace都不同,此时可以理解为二 级缓存区域是根据mapper划分。 每次查询会先从缓存区域查找,如果找不到则从数据库查询,并将查询到数 据写入缓存。Mybatis内部存储缓存使用一个HashMap,key为 hashCode+sqlId+Sql 语句。value 为从查询出来映射生成的java对象。 sqlSession 执行 insert、update、delete 等操作 commit 提交后会清空缓存区 域,防止脏读。

二级缓存工作模式:

配置二级缓存配置:

第一步:启用二级缓存 在SqlMapperConfig.xml 中启用二级缓存,如下代码所示,当 cacheEnabled 设置为true时启用二级缓存,设置为false时禁用二级缓存。 第二步:对象序列化 将所有的POJO类实现序列化接口Java.io.Serializable。 第三步:配置映射文件 在Mapper映射文件中添加,表示此mapper开启二级缓存。 当SqlSeesion 关闭时,会将数据存入到二级缓存.

Mybatis:

xml 复制代码
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

Mapper:

xml 复制代码
        <!--
           设置二级缓存配置的
           size=""缓存对象数量
           flushInterval=""设置二级缓存有效时间   毫秒单位
           eviction="FIFO"  firstinfirstout先入先出 配置到期后淘汰策略
        -->
    <cache size="20" flushInterval="3000"></cache>

四.Mybatis架构:

相关推荐
闲人编程1 小时前
中间件开发与生命周期管理
缓存·中间件·生命周期·日志·扩展·codecapsule
Stone_OverLooking2 小时前
Qt6.5.3 mingw64 Ninja编译oracle oci驱动
数据库·qt·oracle
安当加密2 小时前
Oracle数据库透明加密实践:基于TDE架构的安全加固方案
数据库·oracle·架构
NineData3 小时前
NineData 支持 DB2 迁移到 PolarDB Oracle
数据库·oracle·ninedata·数据库迁移·数据库迁移工具·信创改造·智能数据管理平台
RoboWizard5 小时前
双接口移动固态硬盘兼容性怎么样?
人工智能·缓存·智能手机·电脑·金士顿
DBA小马哥7 小时前
Oracle迁移中查询优化器原理解析与实战优化策略
数据库·oracle
卓码软件测评7 小时前
第三方数据库测试:【utPLSQL用于Oracle和tSQLt用于SQL Server数据库单元测试框架入门】
数据库·oracle·sqlserver·单元测试·mssql
码农阿豪7 小时前
从 Oracle 到金仓:一次真实迁移经历的复盘与思考
数据库·oracle·金仓数据库
一颗宁檬不酸7 小时前
Oracle PL/SQL 过程与游标实战分享:马拉松赛事管理系统
数据库·sql·oracle
染指11107 小时前
72.渗透-Mysql基础-选择数据库
数据库·oracle