mybatis配置自带缓存和第三方缓存
参考:https://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html,
http://www.yihaomen.com/article/Java/428.htm
许多应用程序,为了提高性能而增加缓存, 特别是从数据库中获取的数据. 在默认情况下,mybatis 的一级缓存是默认开启的。类似于hibernate, 所谓一级缓存,也就是基于同一个sqlsession 的查询语句,即 session 级别的缓存,非全局缓存,或者非二级缓存.
如果要实现 mybatis 的二级缓存,一般来说有如下两种方式:
1. 采用 mybatis 内置的 cache 机制。
2. 采用三方 cache 框架, 比如ehcache, oscache 等等.
采用 mybatis 内置的 cache 机制。
在 sql 语句映射文件中加入 <cache /> 语句 , 并且相应的 model 类要实现 java Serializable 接口,因为缓存说白了就是序列化与反序列化的过程,所以需要实现这个接口. 单纯的 <cache /> 表示如下意思:
1.所有在映射文件里的 select 语句都将被缓存。
2.所有在映射文件里 insert,update 和 delete 语句会清空缓存。
3.缓存使用“最近很少使用”算法来回收
4.缓存不会被设定的时间所清空。
5.每个缓存可以存储 1024 个列表或对象的引用(不管查询出来的结果是什么) 。
6.缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用者或线程潜在修改。
缓存元素的所有特性都可以通过属性来修改。比如:
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />
采用 ehcache 来实现 mybatis 的二级缓存
首先需要在 mybatis 的官网上下载相关jar 包:https://code.google.com/p/mybatis/ 写文档的时候下载的是:mybatis-ehcache-1.0.2.zip ,里面包括了
mybatis-ehcache-1.0.2.jar
ehcache-core-2.6.5.jar
slf4j-api-1.6.1.jar
当然,采用ehcache 就必须在 classpath 下 加入ehcache 的配置文件 ehcache.xml:
<cache name="default"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="10"
overflowToDisk="true"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="120"
maxElementsOnDisk="10000"
/>
那么在 sql 映射文件中要如何配置呢,参考如下:
<cache type="org.mybatis.caches.ehcache.LoggingEhcache" >
<property name="timeToIdleSeconds" value="3600"/><!--1 hour-->
<property name="timeToLiveSeconds" value="3600"/><!--1 hour-->
<property name="maxEntriesLocalHeap" value="1000"/>
<property name="maxEntriesLocalDisk" value="10000000"/>
<property name="memoryStoreEvictionPolicy" value="LRU"/>
</cache>
总结:无论是采用mybatis 自身的cache 还是三方的cache , 这样的配置,就是对 所有的select 语句都全局缓存,但事实上,并不总是这样,比如,我在这系列教程中第七章中 http://www.yihaomen.com/article/java/326.htm,自己写的分页算法,就不能用这种情况。需要禁止掉cache ,所以需要如下方法:
<select id="selectArticleListPage" resultMap="resultUserArticleList" useCache="false">
.......
注意到 useCache="false" 了吗? 这可以避免使用缓存。
转载于:https://www.cnblogs.com/dome/p/6838419.html
mybatis配置自带缓存和第三方缓存相关推荐
- 好947 Mybatis 配置resultMap 带參数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错...
//TMD 写几个demo 还有大站採集 <a target=_blank href="http://hao947.com/" target="_blank&quo ...
- MyBatis 缓存详解-第三方缓存做二级缓存
除了MyBatis 自带的二级缓存之外,我们也可以通过实现Cache 接口来自定义二级缓存. MyBatis 官方提供了一些第三方缓存集成方式,比如ehcache 和redis: https://gi ...
- Mybatis一级缓存、整合第三方缓存ehcache、Mybatis二级缓存
8. 缓存 8.1 一级缓存 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的 ...
- 关于Mybatis整合第三方缓存
需要导入第三方相关的jar包:ehcache-core-2.6.8.jar.slf4j-api-1.6.1.jar.slf4j-log4j12-1.6.2.jar 还需要导入相关的适配文件到lib下: ...
- Mybatis一级缓存和二级缓存(带测试方法)
目录 相关导读 一.什么是缓存 二.Mabtis一级缓存 (1)测试一级缓存 (2)清空一级缓存 三.Mybatis二级缓存 (1)开启二级缓存 (2)测试二级缓存 相关导读 Mybatis专栏: M ...
- MyBatis整合第三方缓存
MyBatis缓存做的并不专业,用的是map,但是它给了我们一个接口Cache,我们通过实现这个接口,可以自定义缓存.本例子用的为ehcache ,Hibernate用的也是ehcache缓存技术. ...
- mybatis 详解------ 一级缓存、二级缓存(九)
mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMa ...
- 我的架构梦:(二)MyBatis的一级、二级、分布式缓存的应用以及源码分析
mybatis的一级.二级.分布式缓存的应用以及源码分析 一.mybatis缓存 二.一级缓存 三.一级缓存源码分析 四.二级缓存 五.二级缓存整合redis 六.二级缓存整合redis源码分析 一. ...
- 肝了一早上,终于把mybatis的一级缓存和二级缓存原理搞懂了~
今天的沉淀,是助力明天飞向远方的基石~ 每当自己沉思下来写学习文章的时候,内心深处总是会得到一片宁静. 缓存的概念 我们在查询数据时,经常去查询一些条件相同.数据的正确与否对最终结果影响不大的数据,并 ...
最新文章
- laravel mysql like_Laravel数据库查询中对 like 的值进行转义
- Android SlidingMenu以及ActionBarSherlock的基础使用教程
- 正确的 send recv 行为
- 在Excel中如何引用其他的工作表或者工作簿
- Socket之TCP客户端【Python】
- java委托机制教程_通过反射实现Java下的委托机制代码详解
- wdcp mysql密码_WDCP提示无法连接mysql及创建站点提示mysql密码不正确
- .NET 6 新特性 Parallel ForEachAsync
- Maven系列(一):maven基础入门
- 使用Python创建一个系统监控程序
- Shell 的基础知识
- 程序员的代码写的再牛也没有马伊琍文章的分手语牛!
- 眼擎科技CEO朱继志:如何设计自动驾驶的视觉成像系统 | 吃瓜笔记
- BXP_4.1安装配置及域应用随记一
- 响应式编程优点 有效_美团 EasyReact 源码剖析:图论与响应式编程
- Docker 容器安装监控软件 cAdvisor
- java语言变量分为_在Java语言中变量分为四种,分别是___________________________________________。_学小易找答案...
- linux系统中串口驱动的基本实现原理
- 【强化学习与机器人控制论文 2】基于强化学习的五指灵巧手操作
- 计算机网络wifi是什么意思,Mifi是什么,和wifi有什么区别?
热门文章
- 【聚类】- 聚类实现的数据结构抽象
- cs中ComboBox以设置DataSource方式填充后,清除选项出错
- ASP.NET 2.0中的Session状态丢失的解决办法
- 经典重温:FAIR提出SlowFast,用双分支非对称网络处理不同采样率的视频!代码开源!...
- 目标检测再次革新!图灵奖得主团队提出Pix2Seq,将Detection变成了Image Captioning...
- 视频超分,Transformer再下一城之VSR-Transformer
- 视频隐身衣:物体移除、去水印、后期处理毫无痕迹
- PyTorch 1.5上线:加入稳定C++前端,高级自动梯度API
- ROBEL:谷歌推出低成本机器人训练平台
- 阿里巴巴提出Auto-Context R-CNN算法,刷出Faster RCNN目标检测新高度