MyBatis一级缓存和二级缓存是两种缓存机制,用于提高MyBatis的查询性能。
一级缓存是MyBatis默认启用的缓存机制,它是在SqlSession级别的缓存,即同一个SqlSession对象中进行的查询会被缓存下来。一级缓存是基于对象的引用来实现的,在同一个SqlSession中,如果两次查询的参数相同,那么第二次查询会直接从一级缓存中获取结果,而不需要再次发送SQL语句到数据库。一级缓存的生命周期与SqlSession相同,当SqlSession关闭后,一级缓存会被清空。
二级缓存是在SqlSessionFactory级别的缓存,即不同的SqlSession之间可以共享同一个二级缓存。二级缓存是基于对象的序列化来实现的,当一个查询结果被放入二级缓存后,会被序列化成字节流并保存在内存中。当其他SqlSession进行相同的查询时,会尝试从二级缓存中获取结果,如果存在缓存则直接返回结果,否则才会发送SQL语句到数据库。二级缓存的生命周期与SqlSessionFactory相同,当应用程序关闭时,二级缓存会被清空。
需要注意的是,二级缓存的默认开启是需要手动配置的,而且对于部分特殊情况的查询,二级缓存可能不会被使用到,比如带有动态SQL语句的查询或者使用了一些特殊的查询方式。