说起持久层框架,我们不禁会想起mybatis,从而不能避免的需要了解它的缓存机制,所以有兴趣的朋友们可以跟小编一起来看看哦。
首先是,一级缓存(SqlSession)。它默认就可以使用的,其框架处理缓存就是依赖sql去映射id ,因为mybatis的内部缓存就是使用一个HashMap,key是hashcode+statementId+sql语句。Value就是查询出来的结果集映射成的java对象。
因为一级缓存的作用域就是一个SqlSession ,所以一旦session发生了变化,一级缓存就·失败了,而且在同一个SqlSession里面,如果执行相同的查询SQL,第一次会去查询数据库,并且写到缓存里面;第二次就会直接从缓存里面去取。如果执行SQL时两次查询中间发生了增删改操作的话,那么SqlSession的缓存会清空。
每次执行查询语句会先去缓存中查找的,如果找不到了,才会去数据库里面查询,然后再把结果写到缓存里面去。
我们再来看看,二级缓存(SqlSessionFactory),它默认是无法使用的,我们如果想要使用,就需要其对进行相关配置,
在映射文件中增加标签
这个要求缓存类必须实现可序列化接口的。
需要了解的是,二级缓存是mapper级别的。而mybatis默认就是没有开启二级缓存的。
所以我们第一次调用mapper下的SQL去查询用户信息时,查询到的信息会存到该mapper对应的二级缓存区域里面。
在第二次调用相同namespace下的mapper映射文件里面相同的SQL去查询用户信息时,就会去对应的二级缓存内取结果了。
要是调用相同namespace下的mapper映射文件中的增删改SQL了,并且执行了commit操作。那么就会清空该namespace下的二级缓存了。
好了,以上就是有关mybatis缓存的所有内容了,还想了解更多java常见问答信息,记得关注本站消息获取。
推荐阅读: