参考: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配置自带缓存和第三方缓存相关推荐

  1. 好947 Mybatis 配置resultMap 带參数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错...

    //TMD 写几个demo 还有大站採集 <a target=_blank href="http://hao947.com/" target="_blank&quo ...

  2. MyBatis 缓存详解-第三方缓存做二级缓存

    除了MyBatis 自带的二级缓存之外,我们也可以通过实现Cache 接口来自定义二级缓存. MyBatis 官方提供了一些第三方缓存集成方式,比如ehcache 和redis: https://gi ...

  3. Mybatis一级缓存、整合第三方缓存ehcache、Mybatis二级缓存

    8. 缓存 8.1 一级缓存 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的 ...

  4. 关于Mybatis整合第三方缓存

    需要导入第三方相关的jar包:ehcache-core-2.6.8.jar.slf4j-api-1.6.1.jar.slf4j-log4j12-1.6.2.jar 还需要导入相关的适配文件到lib下: ...

  5. Mybatis一级缓存和二级缓存(带测试方法)

    目录 相关导读 一.什么是缓存 二.Mabtis一级缓存 (1)测试一级缓存 (2)清空一级缓存 三.Mybatis二级缓存 (1)开启二级缓存 (2)测试二级缓存 相关导读 Mybatis专栏: M ...

  6. MyBatis整合第三方缓存

    MyBatis缓存做的并不专业,用的是map,但是它给了我们一个接口Cache,我们通过实现这个接口,可以自定义缓存.本例子用的为ehcache ,Hibernate用的也是ehcache缓存技术. ...

  7. mybatis 详解------ 一级缓存、二级缓存(九)

    mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMa ...

  8. 我的架构梦:(二)MyBatis的一级、二级、分布式缓存的应用以及源码分析

    mybatis的一级.二级.分布式缓存的应用以及源码分析 一.mybatis缓存 二.一级缓存 三.一级缓存源码分析 四.二级缓存 五.二级缓存整合redis 六.二级缓存整合redis源码分析 一. ...

  9. 肝了一早上,终于把mybatis的一级缓存和二级缓存原理搞懂了~

    今天的沉淀,是助力明天飞向远方的基石~ 每当自己沉思下来写学习文章的时候,内心深处总是会得到一片宁静. 缓存的概念 我们在查询数据时,经常去查询一些条件相同.数据的正确与否对最终结果影响不大的数据,并 ...

最新文章

  1. laravel mysql like_Laravel数据库查询中对 like 的值进行转义
  2. Android SlidingMenu以及ActionBarSherlock的基础使用教程
  3. 正确的 send recv 行为
  4. 在Excel中如何引用其他的工作表或者工作簿
  5. Socket之TCP客户端【Python】
  6. java委托机制教程_通过反射实现Java下的委托机制代码详解
  7. wdcp mysql密码_WDCP提示无法连接mysql及创建站点提示mysql密码不正确
  8. .NET 6 新特性 Parallel ForEachAsync
  9. Maven系列(一):maven基础入门
  10. 使用Python创建一个系统监控程序
  11. Shell 的基础知识
  12. 程序员的代码写的再牛也没有马伊琍文章的分手语牛!
  13. 眼擎科技CEO朱继志:如何设计自动驾驶的视觉成像系统 | 吃瓜笔记
  14. BXP_4.1安装配置及域应用随记一
  15. 响应式编程优点 有效_美团 EasyReact 源码剖析:图论与响应式编程
  16. Docker 容器安装监控软件 cAdvisor
  17. java语言变量分为_在Java语言中变量分为四种,分别是___________________________________________。_学小易找答案...
  18. linux系统中串口驱动的基本实现原理
  19. 【强化学习与机器人控制论文 2】基于强化学习的五指灵巧手操作
  20. 计算机网络wifi是什么意思,Mifi是什么,和wifi有什么区别?

热门文章

  1. 【聚类】- 聚类实现的数据结构抽象
  2. cs中ComboBox以设置DataSource方式填充后,清除选项出错
  3. ASP.NET 2.0中的Session状态丢失的解决办法
  4. 经典重温:FAIR提出SlowFast,用双分支非对称网络处理不同采样率的视频!代码开源!...
  5. 目标检测再次革新!图灵奖得主团队提出Pix2Seq,将Detection变成了Image Captioning...
  6. 视频超分,Transformer再下一城之VSR-Transformer
  7. 视频隐身衣:物体移除、去水印、后期处理毫无痕迹
  8. PyTorch 1.5上线:加入稳定C++前端,高级自动梯度API
  9. ROBEL:谷歌推出低成本机器人训练平台
  10. 阿里巴巴提出Auto-Context R-CNN算法,刷出Faster RCNN目标检测新高度