Mybatis和Hibernate类似,同样有缓存,有一级缓存和二级缓存。
一级缓存
Mybatis通过SqlSession对数据库进行操作,所以一级缓存是SqlSession级别的缓存,即在同一个SqlSession中,操作数据库后会将查询数据放到缓存区域,当该SqlSession再次查询该数据时,将在缓存区域获得数据。若该SqlSession执行增加(insert)、修改(update)、删除(delete)操作后,commit()时将会清空缓存。
一级缓存默认开启。假如在程序中SqlSession非单例,即有多个SqlSession实例,则会出现脏数据的情况,因此此缓存只对单个SqlSession有效。使用中要保证SqlSession是单例的,即整个过程共享同一SqlSession。
二级缓存
Mybatis二级缓存是跨SqlSession的缓存,即各个SqlSession共享同一二级缓存,和一级缓存类似,SqlSession查询数据后,会将数据存储在缓存区域,当该SqlSession或者其他SqlSession再次查询该数据时,将在缓存区域获得数据。若某SqlSession执行增加(insert)、修改(update)、删除(delete)操作后,commit()时将会清空缓存。
二级缓存配置:
在SqlMapConfig.xml配置文件中,开启缓存标识,
<setting name="cacheEnabled" value="true"/>
该值默认为true,在mapper.xml中,开启mapper级别缓存。配置即可。运行程序时,可查看日志,会有缓存命中率等提示。