TZ_02MyBatis_一级缓存和二级缓存
Posted asndxj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TZ_02MyBatis_一级缓存和二级缓存相关的知识,希望对你有一定的参考价值。
1.Mybatis中的缓存
1>什么是缓存
存在于内存中的临时数据。
2> 为什么使用缓存
减少和数据库的交互次数,提高执行效率。
3>什么样的数据能使用缓存,什么样的数据不能使用
适用于缓存:
经常查询并且不经常改变的。
数据的正确与否对最终结果影响不大的。
不适用于缓存:
经常改变的数据
数据的正确与否对最终结果影响很大的。
例如:商品的库存,银行的汇率,股市的牌价。
2.Mybatis中的一级缓存和二级缓存
1> 一级缓存:
它指的是Mybatis中SqlSession对象的缓存。
当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中
查询是否有,有的话直接拿出来用。
当SqlSession对象消失时,mybatis的一级缓存也就消失了。
2>二级缓存:
它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
二级缓存的使用步骤:
第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
<--默认是true不需要配置-->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
<!--开启user支持二级缓存 --> <cache></cache>
第三步:让当前的操作支持二级缓存(在select标签中配置)
<select id="testCheckById" resultType="user" parameterType="int" useCache="true">
Level2Check.java
/**
* 1.让mybatis支持二级缓存
* 2.
*/
@Test
public void testCheckById()
// 获取sessionfactory
SqlSession session1 = factory.openSession();
UserDao userDao1 = session1.getMapper(UserDao.class);
User user1 = userDao1.testCheckById(41);
System.out.println(user1.toString());
session1.close();
SqlSession session2 = factory.openSession();
UserDao userDao2 = session2.getMapper(UserDao.class);
User user2 = userDao2.testCheckById(41);
System.out.println(user2.toString());
session2.close();
System.out.println(user1 == user2);
以上是关于TZ_02MyBatis_一级缓存和二级缓存的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis缓存看这一篇就够了(一级缓存+二级缓存+缓存失效+缓存配置+工作模式+测试)