Mybatis的一级缓存和二级缓存机制

一级缓存的应用(自动开启,创建Sqlsession

正式开发,是将mybatisspring进行成和开发,事务控制在service中。一个service方法中包括很多mapper方法的调用。

Service  开始执行时, 开启事务(创建sqlSession对象)

第一次调用 mapper  的方法 findUserById(1)

第二次调用mapper 的方法  findUserById(1) ,从一级缓存中取数据。

方法结束,sqlSession 关闭。

SqlSession 一关闭 一级缓存就消失。 或者 commit一下 更新时缓存清空。

 

如果  执行两次service ,调用相同的用户信息,不走一级缓存,因为执行完第一个一级缓存,SqlSession 已经被清空。走二级缓存。

 

二级缓存  (需要手动开启缓存)

SqlSession1 查询用户id1的用户信息,查询到的用户信息,查询到用户信息在SqlSession1 close时候会将查询数据存储到二级缓存中。

SqlSession2 去查询用户的I1的用户,去缓存中找是否存在数据,如果存在直接从缓存中取出数据。

二级缓存比一级缓存的范围更大,多个SQLSession可以共享一个Mapper的二级缓存区域。 UserMapper 有自己的缓存区域, OrderMapper 也有自己的缓存区域。(每一个缓存区域是按照namespace分的,有一个namespacemapper 就有一个二级缓存区域。)

如果两个mapper namespace 相同,那么这两个mapper 共享一个二级缓存区域。

如果SqlSession3 去执行commit提交,那么二级缓存将会清空。

 

设置方法

1. 需要在 sqlMapConfig.xml 中 设置 setting标签下

  <!-- 开启二级缓存 二级缓存总开关默认为FALSE -->

    <setting name="cacheEnable" value="true"/>

2. 还需要在具体的mapper.xml 中设置打开二级缓存

mapper 标签中 加入     <cache/>

 

 

3.设置pojo类实现序列化接口

 pojo类实现 Serializable 接口即可。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值