Mybatis一级缓存与二级缓存的区别

我们为什么要使用Mybatis?

这里就要提到JDBC的一些弊端:如硬编码问题,SQL参数固定,代码重复以及底层的一些问题

为了解决这些问题,我们采用了Mybatis

Mybatis是什么?

Mybatis是一个基于Java的持久层框架(半自动)。

持久层框架就是操作数据库的框架,对之前使用的JDBC代码进行了封装。

它支持定制化SQL,存储过程以及高级映射从而解决了JDBC的弊端等问题

Mybatis为什么要使用缓存

为了减少Java Applicationd与数据库的交互次数,减少系统开销从而提高程序的运行效率

Mybatis默认定义了两级缓存:一级缓存和二级缓存

一级缓存

一级缓存是Mybatis默认开启的缓存,它是session级别的缓存也称为本地缓存,一级缓存只是相对于同一个SqlSession对象而言,一级缓存中最大的共享范围就是一个SqlSession内部

 

一级缓存工作流程

 1.将查询的数据缓存在内存中,

2.再次查询时先在缓存空间找看是否由对应的数据

3.如果命中,直接使用缓存空间的数据,不用去数据库查询

4.如果未命中,则去数据库查找相对应数据

5.将在数据库查到的数据存到缓存空间

6.将查询结构返回

7.判断缓存级别是否为STAEMENT级别,如果是的话,清空本地缓存

一级缓存失效的情况

同一个sqlsession两次查询期间执行了任何一次增,删,改,提交事务等方法时就会清空一级缓存

不同sqlsession对应不同的一级缓存

同一个sqlsession但查询条件不同

同一个sqlsession两次查询期间手动清除了一级缓存   (sqlSession.clearCache())

二级缓存

M

二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

二级缓存配置步骤(XML)

在mybatis.xml(主配置文件)中的settings标签中添加<setting name="cacheEnabled" value="true" />开启二级缓存

在mapper.xml(sql映射文件中)的mapper标签中添加<cache/>标签开启二级缓存

在使用的操作中配置(在select标签中配置) useCache="true"

二级缓存配置步骤(注解)

在mybatis.xml(主配置文件)中的settings标签中添加 <setting name="cacheEnabled" value="true" />开启二级缓存 二级缓存相对于一级缓存来说,
实现了缓存数据的共享,可控性也
在接口的定义上面直接使用 @CacheNamespace 并将 blocking设置为 true,二级缓存就可以使用了
二级缓存弊端

二级缓存极大可能会出现错误数据,有设计上的缺陷,安全使用的条件比较苛刻

分布式环境下,必然会出现读取到错误 数据,所以不推荐使用

Mybatis 的二级缓存相对于一级缓存来说,实现了缓存数据的共享,可控性也更强
Mybatis 的二级缓存相对于一级缓存来说,
实现了缓存数据的共享,可控性也更强
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值