1, 什么是一级缓存和二级缓存
mybatis中的缓存 :我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。
1, 一级缓存 :
在同一个session中有效,当session调用了close()方法,缓存就会被释放,mybatis默认开启的是一级缓存
2,二级缓存
在同一个SessionFactory中有效,一个sessionFactory中所有的session共享缓存数据 修改了一个session中数据,另一个session再调用时,获得的是被修改的数据, 当sessionFactory调用了close()方法,缓存才会被释放
2,为什么使用二级缓存
减轻与数据库连接次数,提升查询时的效率,但并不推荐使用二级缓存,因为二级缓存保存的数据非常的不安全,数据容易被修改以及清除,最好值在只需要查询不需要修改的业务中使用,并且最好在单表查询使用
3,怎么使用二级缓存
1,先序列化实体类
public class Student implements Serializable{
...................
}
在StudentMapper.xml文件中配置映射
<mapper>
...............
<cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"/>
...............
<!--可以通过设置useCache来规定这个sql是否开启缓存,ture是开启,false是关闭-->
<select id="selectAllStudents" resultMap="studentMap" useCache="true">
SELECT id, name, age FROM student
</select>
<!--刷新二级缓存
<select id="selectAllStudents" resultMap="studentMap" flushCache="true">
SELECT id, name, age FROM student
</select>
-->
</mapper>
复制代码
在mybatis-config.xml开启二级缓存
<?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>
<settings>
<!--这个配置使全局的映射器(二级缓存)启用或禁用缓存-->
<setting name="cacheEnabled" value="true" />
...............
</settings>
</configuration>
二级缓存配置完毕