MyBatis中的一级缓存和二级缓存有什么区别?
答:首先,MyBatis中的缓存指的是Session缓存,分为一级缓存和二级缓存。
一级缓存的作用域是SqlSession,MyBatis默认开启的是一级缓存。在执行相同的SQL,第一次会去数据库进行查询,并写到缓存之中,到第二次查询乃至以后,都会直接从缓存中查询. 。
如果执行增删改的操作,会清空一级缓存,为了让缓存中存储最新的信息,避免脏读。
二级缓存的作用域是(SqlSessionFactory)针对mapper进行缓存,只要mapper的namespace相同,可能会共享缓存。它需要被手动开启。
它有四种清除策略,分别是LRU、FIFO、SOFT和WEAK,默认的清楚策略是LRU。LRU是最近最久未被使用的,优先被清理。FIFO是先进先出,优先清理最先被缓存的数据对象。SOFT是软引用,移除基于垃圾回收器状态和软引用规则对象。WEAK是弱引用,更积极的移除基于垃圾回收器状态和软引用规则对象。