mybatis缓存

mybatis缓存原理

假设第一次向数据库发送查询请求,把返回的数据存在缓存里,mybatis缓存使用hashmap来存储数据,到第二次查询的时候,先到缓存里面查找有无这条数据,

如果做了增删改操作,缓存就会清空,避免缓存里的数据与数据库里的数据产生冲突,造成脏读.

mybatis使用hashmap存储缓存数据,key是sql+hashcode+sqlid语句,value是查询出来的映射生成的java对象

 

mybatis有两种缓存

一级缓存和二级缓存区别:

一级缓存:作用域是同一个SqlSession,不同的线程有各自的SqlSession,如果缓存区有数据,发起查询到各自的SqlSession一级缓存区域查找数据

二级缓存:作用域是同一个namespace,同一个namespace里的SqlSession可以到相同的二级缓存区域查找数据

 

其中,mybatis默认使用一级缓存

 

二级缓存用法

1.开启:到mybatis-config.xml配置文件中加入

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

2.在对应的mapper映射文件中加入

<cache />,表示此mapper开启二级缓存

3.将查询结果映射的pojo对象实现序列化和反序列化,实现Serializable接口

序列号:将java对象转换为字节流的过程

序列号与反序列化作用:保证对象的完整性与可传递性。

public class Order implements Serializable

禁用二级缓存:在statement语句中加入useCache="false",表示禁用二级缓存

 

在实际开发中,通常使用第三方缓存组件Redis,Ehchache...

posted @ 2022-12-01 19:54  Tmillion  阅读(54)  评论(0编辑  收藏  举报