一级缓存
同一个session 调用多次查询相同的的主键获取数据 发起一次SQL语句
/**
* 1级缓存
* 同一个session 调用多次查询相同的的主键获取数据 发起一次SQL语句
*/
@Test
public void text() {
ActionSQL mapper = getSession().getMapper(ActionSQL.class);
StuBean query = mapper.query("42");
StuBean query1 = mapper.query("42");
System.out.println(query==query1);//获取总条数
}
二级缓存
同一个sqlSessionFactory 不同的session 必须要把session关闭后 才会把数据放在sqlSessionFactory中;
要是不关闭 会默认一级缓存
/**
* * 2级缓存
* 同一个sqlSessionFactory 不同的session 必须要把session关闭后 才会把数据放在sqlSessionFactory中;
* 要是不关闭 会默认一级缓存
*
*/
@Test
public void text1() {
String resource = "config.xml";
InputStream inputStream = ActionSQLShow.class.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取两个session
SqlSession openSession = sqlSessionFactory.openSession();
SqlSession openSession1 = sqlSessionFactory.openSession();
ActionSQL mapper = openSession.getMapper(ActionSQL.class);
ActionSQL mapper1 = openSession1.getMapper(ActionSQL.class);
StuBean query = mapper.query("42");
//关闭第一个session
openSession.close();
StuBean query1 = mapper1.query("42");
System.out.println(query==query1);//获取总条数
}
并且要在XML中设定cache
eviction=“FIFO” //回收策略为先进先出
flushInterval=“60000” //自动刷新时间60s
size=“512” //最多缓存512个引用对象
readOnly=“true” //只读
<mapper namespace="lesson_mybatis_redis.ActionSQL">
<!-- eviction="FIFO" //回收策略为先进先出
flushInterval="60000" //自动刷新时间60s
size=“512” //最多缓存512个引用对象 readOnly="true" //只读
-->
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
<select id="query" resultType="lesson_mybatis_redis.StuBean">
SELECT * FROM student where id = #{0}
</select>
</mapper>