关于详细配置方面已经在另一篇文章中说过:MyBatis中使用Ehcache缓存框架,本篇主要涉及的是如何合理的使用缓存。
缓存简介
缓存的使用是一个很重要的过程,在项目查询配置中有很重要的作用,缓存主要分为一级缓存和二级缓存,一级缓存是默认开启的。
ehcache是一个分布式缓存框架。
我们系统为了提高系统并发、性能,一般会对系统进行分布式部署,所以需要使用分布缓存;如果只是使用单台服务器部署,就把数据缓存到单台服务器。
但是mybatis无法进行分布式缓存,因此需要整合第三方缓存框架:memcached、Redis、ehcache等。
缓存使用场景
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可以用mybatis的二级缓存降低数据库的访问量,提高访问速度。
应用场景主要是: 比较少更新表数据
在mapper.xml中启用Ehcache
如上篇说说,需要在mapper.xml中加上:
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
当为Select语句时
- flushCache默认为false,表示任何时候该语句被调用,都不会去清空本地缓存和二级缓存。
- useCache默认为true,表示将将本条语句结果进行二级缓存。
当为insert、update、delete语句时
- flushCache默认为true,表示任何时候该语句被调用,都会去清空本地缓存和二级缓存。
- useCache属性在该情况下没有。
配置场景
- 一般来讲,Select时候会把flushCache一般会设成false,因为查询不会改变数据库的结果,不需要去更新缓存。useCache设成true,当然可能有些结果变化很频繁的查询可以设成false,因为这种做缓存效果不大。
- 我们做insert、update、delete的时候,flushCache就要设成true,因为可能会改变数据库的记录导致缓存失效。同时useCache就不需要设成true,因为update或delete的结果对缓存没意义。
使用举例
在我们特定情况下,就不适用默认的属性,而是自己更改:
<!-- 判断用户名和密码 -->
<select id="getUserInfo" parameterType="pd" resultType="pd" useCache="false">
select * from SYS_USER
where 1=1
<if test="USERNAME != null and PASSWORD != null">
and USERNAME = #{USERNAME} and PASSWORD = #{PASSWORD}
</if>
</select>
<!-- 更新登录时间 -->
<update id="updateLastLogin" parameterType="pd" flushCache="false">
update SYS_USER set
LAST_LOGIN = #{LAST_LOGIN}
where USER_ID = #{USER_ID}
</update>