Mybatis : 一级缓存和二级缓存

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>

二级缓存配置完毕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值