mybatis默认缓存是PerpetualCache,可以查看一下它的源码,发现其是Cache接口的实现;那么我们的缓存只要实现该接口即可。
该接口有以下方法需要实现:
String getId();
int getSize();
void putObject(Object key, Object value);
Object getObject(Object key);
Object removeObject(Object key);
void clear();
ReadWriteLock getReadWriteLock();
1 实现类:
2 spring中的mybatis配置
<!-- mybatis配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:app/mapper/**/*.xml"/>
<property name="configLocation" value="classpath:/mybatis/mybatis-config.xml" />
</bean>
3 mybatis-config.xml 中的settings配制
<settings>
<!-- 开启缓存支持 -->
<setting name="cacheEnabled" value="true" />
.......
</settings>
4 在需要加缓存的sqlMap中加入<cache eviction="LRU" type="app.platform.mybatis.MybatisRedisCache" />
例:
<mapper namespace="SYS_ROLE">
<!-- 缓存 -->
<cache eviction="LRU" type="app.platform.mybatis.MybatisRedisCache" />
<!-- 查询所有 -->
<select id="findAll" parameterType="HashMap" resultType="HashMap">
select
<include refid="base_column" />
from SYS_ROLE
where 1=1
<if test="BUS_TYPE!=null and BUS_TYPE!=''">
and BUS_TYPE =#{BUS_TYPE}
</if>
<if test="ENABLE!=null and ENABLE!=''">
and ENABLE =#{ENABLE}
</if>
<if test="ROLE_NAME!=null and ROLE_NAME!=''">
and ROLE_NAME like '%'||#{ROLE_NAME}||'%'
</if>
<if test="ROLE_OTHER_NAME!=null and ROLE_OTHER_NAME!=''">
and ROLE_OTHER_NAME like '%'||#{ROLE_OTHER_NAME}||'%'
</if>
</select>
</mapper>
本文参考了http://blog.csdn.net/nmgrlq/article/details/7996925,按他的方式没配置成功,按上面的方式修改后成功