mybaties 缓存
时间: 2023-10-01 20:10:09 浏览: 51
MyBatis缓存可以分为一级缓存和二级缓存。
一级缓存是SqlSession级别的缓存,它的作用域是同一个SqlSession,当进行相同的查询时,MyBatis会先从缓存中查找,如果找到了就直接返回结果,没有找到则进行数据库查询,并将查询结果存入缓存中。一级缓存默认开启,可以通过SqlSession的clearCache方法清空。
二级缓存是Mapper级别的缓存,它的作用域是同一个Mapper下的所有SqlSession。当进行相同的查询时,MyBatis会先从二级缓存中查找,如果找到了就直接返回结果,没有找到则进行数据库查询,并将查询结果存入二级缓存中。二级缓存需要手动开启,可以通过在Mapper.xml中添加<cache/>标签启用,并设置相应的属性。
需要注意的是,二级缓存的使用需要满足以下条件:
1. 映射语句的返回值必须是可序列化的。
2. 查询语句不能包含动态SQL。
3. 在映射语句中不能使用ResultMap的继承。
4. 在映射语句中不能使用嵌套查询。
5. 在映射语句中不能使用存储过程。
相关问题
mybatis 缓存
Mybatis的一级缓存是指在同一个SqlSession中,执行相同的查询语句,第一次查询的结果会被缓存到内存中,后续的查询会直接从缓存中获取结果,提高查询效率。
而二级缓存是指在不同的SqlSession中,执行相同的查询语句,第一次查询的结果会被缓存到内存或者磁盘中,后续的查询会直接从缓存中获取结果,提高查询效率。二级缓存需要在mapper.xml文件中进行配置,同时需要在SqlSessionFactory中开启二级缓存。
mybatis 缓存机制
MyBatis缓存机制包括二级缓存和一级缓存。一级缓存是SqlSession级别的缓存,也称为本地缓存。二级缓存是Mapper级别的缓存,也称为全局缓存。
一级缓存是MyBatis默认开启的缓存,不需要手动开启。它缓存的是查询结果对象。当调用SqlSession的修改、添加、删除、commit()、close()、clearCache()等方法时,一级缓存会被清空。
二级缓存需要手动配置开启。它缓存的是查询结果对象的序列化形式。当SqlSession关闭或提交事务时,二级缓存才会被刷新到数据库中。它可以被多个SqlSession共享,对于相同的查询,多个SqlSession可以直接从二级缓存中获取结果,避免了再次查询数据库。
一级缓存和二级缓存是相互独立的,它们互不干扰。一级缓存是默认开启的,而二级缓存需要手动配置开启。在同一个Mapper中,如果开启了二级缓存,那么在执行相同的查询时,首先会从二级缓存中查找,如果没有命中,则会继续查找一级缓存,最后才会查询数据库。
通过使用MyBatis的缓存机制,可以提高查询性能,减少对数据库的访问次数,提升系统的响应速度。但是需要注意,缓存机制可能会导致数据不一致的问题,因此在使用缓存时需要根据具体业务场景进行合理的配置和使用。