mybatis默认情况下是默认开启一级缓存的,一级缓存就是同一个sqlSession查询相同的数据,是会进行缓存的。
一级缓存
默认情况下系统是开启一级缓存的,当我们获得同一个sqlSession对象,如果调用sqlSession的同一个方法查询同一行数据,那么第二次查询不会去数据库中查询,因为第一个已经进行了缓存,所以可以直接使用,除非缓存失效,或者数据数据要更新,否则都是在缓存中进行查询。
二级缓存
一级缓存是默认的,所以有很的局限性,对于一个sqlSession有效,但是对于其他的sqlSession就没有效了,这个时候如果,我们需要跨session就要开启二级缓存,。我们需要在Admin.xml中配置<cache/>
<mapper namespace="com.ddh.domain.Admin">
<sql id="cols">
a_id,a_name,a_password,a_username
<cache/>
</sql>
<select id="login" resultType="int" parameterType="admin">
select count(*) from admin where a_username = #{a_username} and a_password=#{a_password}
</select>
<select id="find" resultType="int" parameterType="admin">
select a_id from admin where a_username = #{a_username} and a_password=#{a_password}
</select>
mapper>
这样配置之后许多都是默认的,所有查询的数据都会被缓存下来,所有更新,删除的数据都会都将缓存更新,比如我们可以配置一下参数
<cache eviction="LRU" flushInterval="10000" size="1024" readOnly="true"/>
,
eviction表示缓存策略,这里有LRU 、还有先进先出(FIFO)、软引用(SOFT)、弱引用(WEAK)等,flushInterval则表示刷新时间,size表示缓存的对象个数,readOnly为true则表示缓存只可以读取不可以修改。
以上配置之后我们的JavaBean还需要序列化,即实现Serializable接口接口即可。
以上就是我对mybatis二级缓存的简单理解。