mybatis一二级缓存
时间: 2023-08-02 07:04:54 浏览: 44
MyBatis提供了一级缓存和二级缓存来提高查询性能。一级缓存是SqlSession级别的缓存,它默认是开启的,可以减少对数据库的查询次数。一级缓存的作用范围是在同一个SqlSession中,多次相同的查询只会从缓存中获取数据,而不会再次发送SQL语句到数据库。\[3\]
而二级缓存是Mapper级别的缓存,多个SqlSession可以共享同一个Mapper的二级缓存。它的作用范围更大,可以跨SqlSession使用。二级缓存的开启需要在全局配置文件中启用,并在对应的Mapper映射文件中启用。此外,POJO类还需要实现Serializable接口,以便将数据序列化到缓存中。二级缓存只有在SqlSession关闭或提交之后才会生效。\[2\]\[3\]
然而,二级缓存也有一些弊端。由于二级缓存是建立在同一个namespace下的,如果对表的操作查询可能有多个namespace,那么得到的数据可能是错误的。因此,不能滥用二级缓存。此外,二级缓存的更新机制相对复杂,需要注意缓存的失效情况。\[1\]
总结来说,一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存。它们都可以提高查询性能,但需要注意使用的场景和缓存的失效情况。
#### 引用[.reference_title]
- *1* *2* *3* [MyBatis 的一级缓存和二级缓存](https://blog.csdn.net/xiaojin21cen/article/details/105689189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]