Mybatis一级缓存和二级缓存

MyBatis中的缓存

1.Mybatis中的缓存简介

缓存的好处:只是查询才有缓存 (增删改没有缓存的),可以增块访问的速度
sqlsession级缓存 (一级缓存) 默认开启的
所有的操作是公用同一个SQLsession对象并且执行的是同一条SQL语句的时候才会走缓存

2.缓存的缺点

可能存在数据的脏读  
执行修改、删除、添加 默认的把缓存中数据全部清空 

3.问题

不同的用户访问的时候创建了不同的sqlsession对象 ,这个时候我们缓存的数据没有办法实现共享

4.sqlsession一级缓存

  一级缓存 Mybatis的一级缓存是指SQLSession,一级缓存的作用域是SQlSession, Mabits默认开启一级缓存。 在同一个SqlSession中,执行相同的SQL查询时;第一次会去查询数据库,并写在缓存中,第二次会直接从缓存中取。 当执行SQL时候两次查询中间发生了增删改的操作,则SQLSession的缓存会被清空。 每次查询会先去缓存中找,如果找不到,再去数据库查询,然后把结果写到缓存中。 Mybatis的内部缓存使用一个HashMap,key为hashcode+statementId+sql语句。Value为查询出来的结果集映射成的java对象。 SqlSession执行增删改等操作commit后会清空该SQLSession缓存。

5.factory的缓存(二级缓存)

使用的方法:
[1] 在Mybatis.xml中开始二级缓存 < setting name=“cacheEnabled” value=“true”/>(默认true,可以不写)
[2] 在对应的mapper.xml文件中< cache readOnly=“true”>< /cache>
[3] 关闭获得提交指定的sqlsesson对象 //close()或commit()才会上传到二级缓存
  注意:当用户查询时,会先在Factory对象自己的缓存中查看是否有现成的数据,有则直接返回,没有则继续查看sqlSession中是否有,有则返回,没有则去数据库中获取资源,将资源返回的同时在SqlSession的缓存中缓存一份儿,当该SqlSession对象被commit或者close时将其缓存的数据刷入到Factory中。

查询数据顺序  二级-->一级--->数据库--->把数据保存到一级,当sqlsession关闭或者提交的时候,把数据刷入到二级缓存中
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值