扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
目录
创新互联公司是一家专业提供裕华企业网站建设,专注与成都网站设计、成都做网站、H5场景定制、小程序制作等业务。10年已为裕华众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。1、MyBatis的一级缓存
2、MyBatis的二级缓存
2.1二级缓存的相关配置
3.MyBatis缓存查询的顺序
4.整合第三方缓存EHCache
sqlSession.clearCache();
使一级缓存失效的四种情况:
1)
不同的
SqlSession
对应不同的一级缓存
2)
同一个
SqlSession
但是查询条件不同
3)
同一个
SqlSession
两次查询期间执行了任何一次增删改操作
4)
同一个
SqlSession
两次查询期间手动清空了缓存
@Test
public void testOneCache(){
SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
Emp emp1 = mapper1.getEmpByEid(1);
System.out.println(emp1);
Emp emp2 = mapper1.getEmpByEid(1);
System.out.println(emp2);
}
查询同一个语句两次,第二次没有从数据库去查,直接输出缓存中的内容
SqlSession不同时就会分别从不同的SqlSession中查数据库
2、MyBatis的二级缓存 二级缓存是 SqlSessionFactory 级别,通过同一个 SqlSessionFactory 创建的 SqlSession 查询的结果会被缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取 二级缓存开启的条件: a>在核心配置文件中,设置全局配置属性 cacheEnabled="true" ,默认为 true ,不需要设置 b>在映射文件中设置标签
c>二级缓存必须在
SqlSession
关闭或提交之后有效
sqlSession.close();
sqlSession.commit();
d>查询的数据所转换的实体类类型
必须实现序列化的接口
使二级缓存失效的情况:
两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效
二级缓存不能再用工具类SqlSessionUtils
public class SqlSessionUtils {
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
二级缓存必须在SqlSession关闭或提交之后有效
@Test
public void testTwoCache(){
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession1 = sqlSessionFactory.openSession(true);
CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
System.out.println(mapper1.getEmpByEid(1));
sqlSession1.close();
SqlSession sqlSession2 = sqlSessionFactory.openSession(true);
CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);
System.out.println(mapper2.getEmpByEid(1));
sqlSession2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
缓存命中率(Cache Hit Ratio):就是看查询的数据在缓存中有没有。
2.1二级缓存的相关配置在mapper配置文件中添加的cache标签可以设置一些属性:
虽然是第三方缓存,但实现的功能与二级缓存相同
a>添加依赖org.mybatis.caches mybatis-ehcache1.2.1 ch.qos.logback logback-classic1.2.3
b>各
jar
包功能
jar 包名称 | 作用 |
mybatis-ehcache | Mybatis 和 EHCache 的整合包 |
ehcache | EHCache 核心包 |
slf4j-api | SLF4J 日志门面包 |
logback-classic | 支持 SLF4J 门面接口的一个具体实现 |
c>创建EHCache的配置文件(resources文件夹下)ehcache.xml(必须叫这个名字)
d>设置二级缓存的类型
不加type使用的是二级缓存默认的
e>加入
logback
日志
存在
SLF4J
时,作为简易日志的
log4j
将失效,此时我们需要借助
SLF4J
的具体实现
logback
来打印日志。
创建
logback的配置文件(resources文件夹下)logback.xml
[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger] [%msg]%n
f>EHCache
配置文件说明
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流