mybatis详解-(22)整合第三方缓存Ehcache
来源:互联网 发布:java微信公众开发项目 编辑:程序博客网 时间:2024/06/09 14:40
前面几篇文章剖析了mybatis的缓存原理,发现mybatis提供的缓存是非常简陋的,用HashMap进行存储。
有专业做缓存的,那么就使用专业的缓存框架吧,这里使用Ehcache来作为mybatis的缓存。
1.引入jar
<!-- 添加Ehcache核心包 --><dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.10</version></dependency><!-- mybatis整合Ehcache的适配器 --><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.0</version> </dependency><!-- 引入日志包 --><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.12</version></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.6</version></dependency><dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency>
2.引入ehcache.xml文件
添加ehcache.xml
<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <diskStore path="D:\mybatis\ehcache"/> <!-- Mandatory Default Cache configuration. These settings will be applied to caches created programmtically using CacheManager.add(String cacheName) --> <!-- 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:内存数量最大时是否清除。 --> <defaultCache maxElementsInMemory="10" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> </ehcache>
3.创建示例
package org.mybatis.cache3ehcache;public class Employee { private Integer id; private String lastName; private String email; private String gender; public Employee() { } public Employee(Integer id, String lastName, String email, String gender) { this.id = id; this.lastName = lastName; this.email = email; this.gender = gender; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String toString() { return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]"; }}
package org.mybatis.cache3ehcache;public interface EmployeeMapper { public Employee getEmpById(Integer id);}
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="org.mybatis.cache3ehcache.EmployeeMapper"> <!--这里引用第三方缓存(或自定义缓存)--> <cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache> <select id="getEmpById" resultType="org.mybatis.cache3ehcache.Employee" useCache="true"> select * from mybatis_employee me where me.id = #{id} </select></mapper>
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <properties resource="db.properties"></properties> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="lazyLoadingEnabled" value="true" /> <setting name="aggressiveLazyLoading" value="false"/> <!--开启缓存--> <setting name="cacheEnabled" value="true"/> </settings> <typeAliases> <!-- 为包下的所有类起别名,默认为类名大小写(不区分大小写) --> <package name="org.mybatis.cache3ehcache"/> </typeAliases> <!-- 默认development是开发环境,如果改成test则表示使用测试环境 --> <environments default="dev_mysql"> <environment id="dev_mysql"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${mysql.driver}" /> <property name="url" value="${mysql.url}" /> <property name="username" value="${mysql.username}" /> <property name="password" value="${mysql.password}" /> </dataSource> </environment> <environment id="test_mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${mysql.drivertest}" /> <property name="url" value="${mysql.urltest}" /> <property name="username" value="${mysql.usernametest}" /> <property name="password" value="${mysql.passwordtest}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/cache3ehcachemapper.xml"/> </mappers></configuration>
测试类:
package org.mybatis.cache3ehcache;import java.io.IOException;import java.io.InputStream;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.Test;/** * 整个Ehcache * @author Tang */public class MybatisTest { @Test public void testMybatis() { String resource = "mybatis-config-cache3ehcache.xml";//全局配置文件 InputStream inputStream = null; SqlSessionFactory sqlSessionFactory = null; try { inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession1 = sqlSessionFactory.openSession(); EmployeeMapper mapper1 = sqlSession1.getMapper(EmployeeMapper.class); Employee emp1 = mapper1.getEmpById(2); System.out.println(emp1); sqlSession1.close(); System.out.println("`######"); SqlSession sqlSession2 = sqlSessionFactory.openSession(); EmployeeMapper mapper2 = sqlSession2.getMapper(EmployeeMapper.class); Employee emp2 = mapper2.getEmpById(2); System.out.println(emp2); sqlSession2.close(); System.out.println(emp1 == emp2); } catch (IOException e) { e.printStackTrace(); } finally { } }}
运行结果:
两个不同的sqlSession,发送了一个sql查询,说明缓存已经生效。
阅读全文
0 0
- mybatis详解-(22)整合第三方缓存Ehcache
- mybatis 应用第三方缓存框架ehcache
- mybatis一二级缓存详解,整合ehcache缓存,
- Mybatis--缓存及整合ehcache
- mybatis--()缓存整合ehcache
- 详解:mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- 【MyBatis框架】查询缓存-二级缓存-整合ehcache
- 【MyBatis框架】查询缓存-二级缓存-整合ehcache
- MyBatis (十一) 整合 集成缓存 ehcache
- 【MyBatis框架】查询缓存-二级缓存-整合ehcache
- Mybatis缓存简介和ehcache整合
- mybatis和ehcache缓存框架整合
- Mybatis - 查询缓存(一级缓存,二级缓存,与ehcache整合)
- 【MyBatis】——mybatis缓存以及整合ehcache
- MyBatis--查询缓存--ehcache二级缓存配置文件详解
- Mybatis第八篇【一级缓存、二级缓存、与ehcache整合】
- mybatis中整合ehcache缓存框架的使用
- mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache
- Elasticsearch 查询
- Keras 入门课0 -- 目录
- javascript es5利用闭包特性形成私有方法
- Spring boot中logback的应用
- Linux 创建用户 修改用户权限
- mybatis详解-(22)整合第三方缓存Ehcache
- 软件各种版本的含义!例如RC,M,GA等等
- 罗辑思维训练,身为技术人员你的你达到了几级?
- C实现traceroute(MacOS & Linux系统)
- leetcode 655. Print Binary Tree 深度优先遍历DFS
- IntelliJ Idea SpringBoot jpa mysql数据库增删改查实例
- maven详细介绍
- 极光推送集成与封装
- 148. Sort List--单链表自底向上归并排序