MyBatis 中有两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache)。
一级缓存(Local Cache):
- 范围: 一级缓存是 MyBatis 默认开启的,它是针对于同一个 SqlSession 的缓存,即在同一个 SqlSession 内部有效。
- 作用范围: 当执行相同的查询(SQL 和参数相同)时,结果会被缓存在该 SqlSession 内部,后续查询相同数据时直接从缓存中获取,减少数据库查询次数。
- 生命周期: 一级缓存的生命周期为一个 SqlSession,当 SqlSession 关闭或提交时,一级缓存被清空,数据失效。
二级缓存(Global Cache):
- 范围: 二级缓存是跨 SqlSession 的缓存,它可以被多个 SqlSession 共享使用。
- 作用范围: 当开启二级缓存后,查询的结果会被缓存起来,在不同的 SqlSession 中执行相同的查询时,如果数据在二级缓存中存在,则可以直接从缓存中获取,而不需要再去数据库查询。
- 生命周期: 二级缓存的生命周期与整个 Mapper 映射文件相关联,当执行 DML(insert、update、delete)操作时,会清空对应的缓存。
区别:
- 范围不同: 一级缓存针对于单个 SqlSession,而二级缓存是跨 SqlSession 的,可以被多个 SqlSession 共享使用。
- 作用范围不同: 一级缓存是在同一个 SqlSession 内部有效,而二级缓存可以被多个 SqlSession 共享,能够跨会话共享缓存数据。
- 生命周期不同: 一级缓存的生命周期为一个 SqlSession,而二级缓存的生命周期与整个 Mapper 映射文件相关联。
在实际应用中,可以根据需求选择开启或关闭一级缓存和二级缓存,并根据业务特点合理使用缓存,避免数据不一致或缓存带来的问题。
Was this helpful?
0 / 0