mybatis学习教程中级(十)mybatis和ehcache缓存框架整合(重点)

1、前言

前面讲解了mybatis的一级、二级缓存。一级然并卵(spring整合后),二级还是有用的。我们现在来看看用ehcache来维护管理二级缓存。不要问我为什么,因为都这么用!!!java是框架语言,人家给你买个了车车,你硬是要自己写个赛跑的车,你认为呢(精神可嘉)??

2、配置ehcache

我们要先有个态度,前面我们已经有了mybatis的缓存的设置,知道其实质就是用map把数据存起来,这TM就是缓存。所以这些第三方框架也就是做了同样的事情,因为他们更专业。
2.1配置ehcache.xml
把文件放置到resource下面
<span style="font-size:10px;"><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"><!--diskStore:缓存数据持久化的目录 地址  --><diskStore path="F:\ycydevelop\ehcache" /><defaultCache maxElementsInMemory="1000" maxElementsOnDisk="10000000"eternal="false" overflowToDisk="false" diskPersistent="true"timeToIdleSeconds="120"timeToLiveSeconds="120" diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"></defaultCache>
</ehcache></span>
2.2 配置具体的mapper

到具体的mapper.xml,就这样简单,就这么任性。我加入的是userMapper.xml。

    <!--打开mapper二级缓存开关--><cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

如果你希望你本地mapper与全局的sqlconfig不一样的的时候,你已经可以设置缓存

    <!--打开mapper二级缓存开关--><cache type="org.mybatis.caches.ehcache.EhcacheCache"><property name="maxElementsInMemory" value="1000"/></cache>


2.3 测试二级缓存

依旧用以前测试 ,开启两个sqlsession

package com.ycy.mybatis.test;import com.ycy.mybatis.dao.OrdersCustomMapper;
import com.ycy.mybatis.dao.UserMapper;
import com.ycy.mybatis.dao.impl.UserMappermpl;
import com.ycy.mybatis.module.Orders;
import com.ycy.mybatis.module.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** Created by Administrator on 2015/8/31 0031.*/
public class MybatisTest9 {private SqlSessionFactory sqlSessionFactory = null;@Beforepublic void  before() throws IOException {String resource="SqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);sqlSessionFactory= new SqlSessionFactoryBuilder().build(in);}//一级缓存测试@Testpublic  void findOrderAndDetail() throws Exception {SqlSession sqlSession=sqlSessionFactory.openSession();//第一次查询UserMapper userMapper=sqlSession.getMapper(UserMapper.class);User user= userMapper.getUserById(1);System.out.println(user.getUsername());//第二次查询(没有关闭sqlsession)User user2= userMapper.getUserById(1);System.out.println(user2.getUsername());}//二级缓存测试@Testpublic  void cache2() throws Exception {SqlSession sqlSession=sqlSessionFactory.openSession();SqlSession sqlSession2=sqlSessionFactory.openSession();UserMapper userMapper=sqlSession.getMapper(UserMapper.class);UserMapper userMapper2=sqlSession2.getMapper(UserMapper.class);//第一次查询User user= userMapper.getUserById(1);System.out.println(user.getUsername());sqlSession.close();//第二次查询()User user2= userMapper2.getUserById(1);System.out.println(user2.getUsername());sqlSession2.close();}}

测试二级缓存结果:看到0.5了吧,亲爱的小伙伴!!!



name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。

2、二级缓存应用场景

  适用性:对查询频率高,变化频率低的数据建议使用二级缓存。例如我们的账单信息查询

局限性:mybatis二级缓存对细粒度的数据级别的缓存实现不好,例如我们的商品信息,广告信息,实时在更新。而二级缓存是针对mapper的,如果order里面更新    了,那么里面关于order的缓存就清空了哦。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八、开发者工具和指南(四) Orchard dependencies and libraries

本文列举了Orchard项目中的依赖,和Orchard使用它们的简介.依赖的副本在源码库的lib目录中,包含了它们各自的licenses,也能在CREDITS.txt文件中看到它们的归属. Akismet 这是Orchard中的默认的垃圾保护服务. ANTLR v3 这是语言识别工具,提供了构造识别器的框架,解释程序,编译器和…

如何使用三态工作流 - [MOSS 2007应用日记]

MOSS 2007的一个很重要的功能就是提供了工作流&#xff0c;让我们可以结合工作流来实现各种需求&#xff0c;系统提供了几种默认的工作流供大家使用&#xff0c;“三态工作流”就是默认的一种。 现在通过一个模拟实验来看看怎么使用“三态工作流”&#xff1a;在行政部子网站下…

微信小程序遍历wx:for,wx:for-item,wx:key

微信小程序中wx:for遍历默认元素为item&#xff0c;但是如果我们设计多层遍历的时候我们就需要自定义item的字段名以及key的键名 wx:for"{{item.goodsList}}" wx:for-item"ite" wx:for-key"idx" wx:key"{{idx}}" 这样子元素就被设置成…

Linux下samba服务的错误处理

错误显示:解决方法:在/etc/samba/smb.conf 文件里有一行自己修改过hosts allow 192.168.x.x x.x.x.x在这里加上自己的充当客户端主机的ip地址即可转载于:https://blog.51cto.com/luochen2015/1693712

[POJ2420 A Star not a Tree?]

[关键字]&#xff1a;随机化搜索 模拟退火 [题目大意]&#xff1a;给出n个点&#xff0c;找出一个距离所有点之和最小的点&#xff0c;输出距离。 // [分析]&#xff1a;同样是随机化的方法&#xff0c;只是在把没个点随机移动时有小小的变动。poj1379是使用得随机一个角度x然后…

推荐:iReaper - MSDN中文Webcast下载程序

看MS的webcast还真是麻烦,我混了这么久,都没搞清楚,这东西在MS那里怎么看的.老是想看,但不知道怎么进去看.但用这个小软件下载看,就很方便.http://myron.cnblogs.com/ 转载于:https://www.cnblogs.com/shiningrise/archive/2008/06/15/1222270.html

前端常用正则

手机号正则 const phoneReg/^1[3456789]\d{9}$/; 邮编正则 const emailReg/^[0-9]{6}$/; 整数正则&#xff08;大于0&#xff09; const zsReg/^(([1-9]\d)|[1-9])?$/; 小数点后保留2位 const limitReg/(^[1-9]([0-9])?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])…

JavaScript URL参数读取

* 用法&#xff1a; * var args getArgs( ); // 从 URL 解析出参数 * var q args.q || ""; // 如果定义了某参数&#xff0c;则使用其值&#xff0c;否则给它一个默认值 * var n args.n ? parseInt(args.n) : 10; */ var getArgs function () { var args new O…

移动wabAPP 开发 viewport 注意事项

我们在开发移动设备的网站时&#xff0c;最常见的的一个动作就是把下面这个东西复制到我们的head标签中&#xff1a; <meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0">http://wenzhixin.net.…

关于QTP 9.2对象库管理的一些总结

QTP 9.2增强了对于对象库的编辑功能&#xff0c;改进了8.2版本中饱受用户诟病的&#xff0c;对于对象库编辑功能不够强大的缺 点。 比如1&#xff09;在新增“Object Repository Manager”中整合了原8.2版本中以插件形式提供的merge功能&#xff0c;方便用户 更加便捷的管理好对…

三目运算符

在js中使用三目运算符能够很大程度上提高代码的&#xff0c;简洁度&#xff0c;但是三目运算符对于js功底不够深厚的同学来说&#xff0c;又实在有些费解和难以记忆&#xff0c;在此简单的做个备忘。 三元运算符的表达式&#xff1a; (expression1) ? (expression2) : (ex…

[团队开发]总结下Server 2008 + TeamFoundation Server 2008安装过程

这段时间公司平台迁移&#xff0c;VS都换成2008的了&#xff0c;原来用的是RUBY的那个管理&#xff0c;换成了现在VSTS项目管理。 所有就下了 TeamFoundation Server 2008 来安装了。 花一个月才搞明白&#xff0c;期间尝试过4次安装都失败了&#xff0c;最后还是成功了 安装SE…

linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader

直接看代码&#xff0c;即使已经理解了代码&#xff0c;但是还是会有种没有学到手的感觉.真正的掌握来自实践&#xff0c;来自己动手做出来.“简单AB任务切换程序”系列文章的目的是&#xff0c;在bochs下&#xff0c;实践出简单AB两个任务的切换. 1. bochs安装或者编译参考 Ub…

使用file做swap分区

有时候在给系统盘分区时&#xff0c;忘记swap分区&#xff0c;这种情况下&#xff0c;可以用一个文件做swap&#xff0c;效果差不多的。这里就以2Gswap分区为例。步骤&#xff1a;1、创建2G大小的文件dd if/dev/zero of/swap bs1M count20482、格式化swap filemkswap /swap3、把…

MoinMoin Wiki 1.7优化与维护经验

CWoW Developer Group(CWDG)从2006年开始在一直使用 MoinMoinWiki 来构建一个魔兽世界游戏插件开发技术知识库, 这2年中wiki的版本也从1.5变更到了1.7. moin1.6是一个变化最大的版本, 连不少wiki语法都改变了, 最显著的莫过于内连接的语法原先是["xxx"]现在与mediaw…

react和vue配置本地代理

React 在react中配置开发环境下的本地代理相对比较简单&#xff0c;直接在package.json文件中修改即可。 但是这样做有其局限性&#xff0c;如果开发中代理多个接口的时候将无法满足需求&#xff0c;我们需要的是下面这种的能够代理多个接口的请求方式 proxy(/back, {target: h…

php异步处理,执行系统命令

为什么80%的码农都做不了架构师&#xff1f;>>> 难点1&#xff1a;php执行系统命令&#xff0c;要等到命令执行完成之后才会结束&#xff0c;不然会造成整个php进程挂起&#xff0c;其他php服务僵死&#xff1f; 难点2&#xff1a;php执行的命令完成后&#xff0c;…

javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法...

错误如下&#xff0c;不知道是不是遇到鬼了&#xff0c;之前好好的&#xff0c;装了myeclipse以后出错了&#xff08;说实话&#xff0c;myeclipse用的很不爽&#xff0c;感觉netbeans更好用些&#xff09; HTTP Status 500 -type Exception reportmessagedescription The serv…

axios取消功能的设计与实现

取消功能的设计与实现 #需求分析 有些场景下&#xff0c;我们希望能主动取消请求&#xff0c;比如常见的搜索框案例&#xff0c;在用户输入过程中&#xff0c;搜索框的内容也在不断变化&#xff0c;正常情况每次变化我们都应该向服务端发送一次请求。但是当用户输入过快的时候&…

为搜索引擎做准备

1、 允许搜索机器人搜索站内所有链接。如果你想某些页面不被搜索&#xff0c;推荐采用robots.txt方法<meta content"all" name"robots" />2、 设置站点作者信息<meta name"author" content"ajienetease.com,阿捷" />3…