mybatis缓存之二级缓存
发布时间:2020-12-14 18:02:17 所属栏目:大数据 来源:网络整理
导读:二级缓存(全局缓存):基于namespace级别的缓存,一个namespace对应一个二级缓存。 工作机制: 一个会话,查询一条数据,这条数据会放在当前会话的一级缓存中; 如果会话关闭,该会话对应的一级缓存就消失了; 可以使用二级缓存将保存之前的一级缓存,新的
二级缓存(全局缓存):基于namespace级别的缓存,一个namespace对应一个二级缓存。 工作机制:
使用过程:
<setting name="lazyLoadingEnabled" value="true"/> mapper namespace="com.gong.mybatis.dao.EmployeeMapper"> cache eviction="FIFO" flushInterval="60000" readOnly="false" size="1024"> <!-- eviction:缓存的回收策略,默认LRU flushInterval:缓存刷新间隔,默认不清空,可以设置一个毫秒值 readOnly:只读为true,所有从缓存中获取操作都是只读操作,不会修改数据,直接将数据在缓存中的引用交给用户; 非只读,获取的数据可能会被修改,会利用序列化&反序列化的技术克隆一份新的数据,安全,但速度慢。 size:缓存存放多少元素 type:指定自定义缓存的全类名,实现Cache接口即可 --> </cache> ...... mapper> public class Employee implements Serializable 测试: package com.gong.mybatis.test; import java.io.IOException; java.io.InputStream; java.util.ArrayList; java.util.Arrays; java.util.HashMap; java.util.List; java.util.Map; org.apache.ibatis.io.Resources; org.apache.ibatis.session.SqlSession; org.apache.ibatis.session.SqlSessionFactory; org.apache.ibatis.session.SqlSessionFactoryBuilder; org.junit.Test; com.gong.mybatis.bean.Department; com.gong.mybatis.bean.Employee; com.gong.mybatis.dao.EmployeeMapper; com.gong.mybatis.mapper.EmployeeMapperDynamicSql; class TestMybatis4 { public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(is); } @Test void test() IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); SqlSession openSession2 = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.); EmployeeMapper mapper2 = openSession2.getMapper(EmployeeMapper.); Employee em = mapper.getEmpById(1); System.out.println(em); openSession.close(); Employee em2 = mapper2.getEmpById(1); System.out.println(em2); openSession.close(); } finally { // TODO: handle finally clause } } } 输出: DEBUG 01-22 10:59:28,726 Cache Hit Ratio [com.gong.mybatis.dao.EmployeeMapper]: 0.0 (LoggingCache.java:62) DEBUG 01-22 10:59:29,055 ==> Preparing: select id,last_name lastName,email,gender from tbl_employee where id = ? (BaseJdbcLogger.java:145) DEBUG 01-22 10:59:29,102 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145) DEBUG 01-22 10:59:29,148 == Total: 1 (BaseJdbcLogger.java:145) Employee [id=1,lastName=dema,1)">genderemail=dema@qq.com,1)">dept=null] DEBUG 01-22 10:59:29,242 Cache Hit Ratio [com.gong.mybatis.dao.EmployeeMapper]: 0.5 (LoggingCache.java:62) Employee [id=null] 需要注意是要在第一个会话结束之后要先关闭,否则如果在最后一起关闭,就变成一级缓存的情况了。 和缓存相关的设置:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |