mybatis缓存

MyBatis缓存机制详解
本文详细介绍了MyBatis中的一级缓存和二级缓存机制,包括它们的工作原理、如何配置及使用,以及自定义缓存的方法。一级缓存默认开启,仅在一个SqlSession会话中有效;二级缓存则面向全局,需在配置文件中开启,可被多个会话共享。

缓存,就是在内存中开辟的一块内存区,暂时的存取数据,提高效率。在mybatis中,将查询到的数据暂时的放到缓存中,这样下次使用时就可以直接使用缓存中的数据,不用再查询数据库。

一级缓存

在mybatis中,一级缓存是默认开启的,它只存在一次sqlsession会话中,会话关闭时,一级缓存也就关闭了,举例说明:

为了方便查看,配置mybatis的日志文件,在控制台打印日志文件

上面方法执行结果:

以及缓存的内容只在当前这个sqlSession中有效,当这个sqlSession会话关闭时,缓存就没有了,也可以通过清空缓存操作来清空缓存:

结果如下:

可以看出,清空缓存后,缓存中没有数据,所以查询了两次数据库,跟上面的作比较的话,就可以发现,上面的第二次查询是查询了缓存中的数据,而下面的因为清空了缓存,所以两次都是查询的数据库。

二级缓存

一级缓存是默认开启的,二级缓存开启需要在mybatis的配置文件中,配置允许二级缓存,同时还要再mapper文件中,开启二级缓存:

在mapper中开启二级缓存:

只需要这样就行了,它采用了默认的配置,也可以进行设置配置:

在之前了解到一级缓存只存在一次会话中,会话结束,缓存就清空了, 二级缓存是面向全局的,每一个mapper文件都对应一个缓存, 它可以被别的会话调用

开启不同的会话,查询结果如下:

可以看出,仍是只查询了一次数据库,第二次虽然不是一次会话,但是二级缓存,可以被不同的会话调用。

需要注意的是:

1.使用二级缓存需要序列化实体,即实体需要实现Serializable,如图:

2.二级缓存是事务性的。这意味着,当 SqlSession 完成并提交时,或是完成并回滚,但没有执行 flflushCache=true 的insert/delete/update 语句时,缓存会获得更新

 自定义缓存:

 自定义缓存需要在mapper文件的cache标签中添加type,如图:

但是要自己定义一个缓存类同时必须实现cache接口:

 

转载于:https://www.cnblogs.com/Zs-book1/p/11271036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值