mybatis学习教程中级(十)mybatis和ehcache缓存框架整合(重点)
1、前言
前面讲解了mybatis的一级、二级缓存。一级然并卵(spring整合后),二级还是有用的。我们现在来看看用ehcache来维护管理二级缓存。不要问我为什么,因为都这么用!!!java是框架语言,人家给你买个了车车,你硬是要自己写个赛跑的车,你认为呢(精神可嘉)??
2、配置ehcache
<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了吧,亲爱的小伙伴!!!
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的缓存就清空了哦。
mybatis学习教程中级(十)mybatis和ehcache缓存框架整合(重点)相关推荐
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- [MyBatis学习笔记] 二、Mybatis基本操作及相关标签介绍
[MyBatis学习笔记] 二.Mybatis基本操作及相关标签介绍 一.Mybatis简介 二.简单的CRUD操作 1.构建SqlSessionFactory (1)编辑mybatis-config ...
- SpringBoot集成Cache缓存(Ehcache缓存框架,注解方式)
1.说明 Spring定义了CacheManager和Cache接口, 用来统一不同的缓存技术, 例如JCache,EhCache,Hazelcast,Guava,Redis等. 本文通过Spring ...
- MyBatis多参数传递之混合方式——MyBatis学习笔记之十五
在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6973266.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(九)--My ...
- 查询缓存---Mybatis学习笔记(十)
mybatis缓存介绍 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. 如下图,是mybatis一级缓存和二级缓存的区别图解: Mybatis一级缓存的作用域是同一个SqlSessio ...
- mybatis学习教程(二)初级的增、删、查、改
引言 本文主要从一个基础实例,讲解Mybatis的实现,已经每一步的详细讲解.我会将项目共享在百度云盘,文章最后! 1.项目结构 2.项目配置 2.1 配置SqlMapConfig.xml 根据My ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...
- mybatis学习:二、 Mybatis的Dao开发、mybatis-config.xml文件的详情
3. Mybatis的Dao开发 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 3.1 Mybatis的核心对象 SqlSessionFactor ...
最新文章
- 记一次Java多线程程序调试经历:HttpClient 死锁
- 十 Appium环境搭建(Windows版)
- 计算机系统结构sw指令集,《深入理解计算机系统》第三章学习笔记
- 关于JavaScript中Function Declaration与Function Expression的进一步说明
- Spring-Cloud中的网关
- iis下安装Memcache
- Robot Framework 教程 (3) - Resource及关键字 的使用
- php heredoc 用法
- 华为全栈AI技术干货深度解析,解锁企业AI开发“秘籍”
- postgresql存图片字段类型_C# 使用 PostgreSQL 存储图片二进制数据
- 【题解】CF#960 H-Santa's Gift
- SSM-Spring-04:Spring的DI的构造注入,P命名注入,和集合注入
- qq等级查询php源码,最新沉沦QQ等级代挂系源码统开源分享
- 软件设计过程--概要设计详细设计
- 腾讯云数据迁移工具解决方案:阿里云迁移到腾讯云
- java/php/net/python大学生就业管理系统设计
- 电脑打开控制面板不显示内容
- 2023湖南农业大学计算机考研信息汇总
- 开源项目搭建私有物联网智能家居接入天猫精灵控制
- 微信小程序跳转第三方页面