生活随笔
收集整理的這篇文章主要介紹了
mybatis整合redis
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
mybatis默認(rèn)緩存是PerpetualCache,可以查看一下它的源碼,發(fā)現(xiàn)其是Cache接口的實(shí)現(xiàn);那么我們的緩存只要實(shí)現(xiàn)該接口即可。
該接口有以下方法需要實(shí)現(xiàn):
? String getId(); ? int getSize(); ? void putObject(Object key, Object value); ? Object getObject(Object key); ? Object removeObject(Object key); ? void clear(); ? ReadWriteLock getReadWriteLock(); 1 實(shí)現(xiàn)類:
[java] ?view plaincopy
package app.platform.mybatis import ?java.util.concurrent.locks.ReadWriteLock;?? import ?java.util.concurrent.locks.ReentrantReadWriteLock;?? ?? import ?org.apache.ibatis.cache.Cache;?? import ?org.slf4j.Logger;?? import ?org.slf4j.LoggerFactory;?? ?? import ?redis.clients.jedis.Jedis;?? import ?redis.clients.jedis.JedisPool;?? import ?redis.clients.jedis.JedisPoolConfig;?? ?? ?? public ? class ?MybatisRedisCache? implements ?Cache?{?? ?????? ????private ? static ?Logger?logger?=?LoggerFactory.getLogger(MybatisRedisCache. class );?? ????private ?Jedis?redisClient=createReids();?? ????????? ????private ? final ?ReadWriteLock?readWriteLock?=? new ?ReentrantReadWriteLock();??? ?????? ????private ?String?id;?? ?????? ????public ?MybatisRedisCache( final ?String?id)?{???? ????????if ?(id?==? null )?{?? ????????????throw ? new ?IllegalArgumentException( "Cache?instances?require?an?ID" );?? ????????}?? ????????logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>MybatisRedisCache:id=" +id);?? ????????this .id?=?id;?? ????}???? ????@Override ?? ????public ?String?getId()?{?? ????????return ? this .id;?? ????}?? ?? ????@Override ?? ????public ? int ?getSize()?{?? ????? ????????return ?Integer.valueOf(redisClient.dbSize().toString());?? ????}?? ?? ????@Override ?? ????public ? void ?putObject(Object?key,?Object?value)?{?? ????????logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject:" +key+ "=" +value);?? ????????redisClient.set(SerializeUtil.serialize(key.toString()),?SerializeUtil.serialize(value));?? ????}?? ?? ????@Override ?? ????public ?Object?getObject(Object?key)?{?? ????????Object?value?=?SerializeUtil.unserialize(redisClient.get(SerializeUtil.serialize(key.toString())));?? ????????logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>getObject:" +key+ "=" +value);?? ????????return ?value;?? ????}?? ?? ????@Override ?? ????public ?Object?removeObject(Object?key)?{?? ????????return ?redisClient.expire(SerializeUtil.serialize(key.toString()), 0 );?? ????}?? ?? ????@Override ?? ????public ? void ?clear()?{?? ??????????redisClient.flushDB();?? ????}?? ????@Override ?? ????public ?ReadWriteLock?getReadWriteLock()?{?? ????????return ?readWriteLock;?? ????}?? ????protected ?? static ?Jedis?createReids(){?? ????????JedisPool?pool?=?new ?JedisPool( new ?JedisPoolConfig(),? "10.12.162.85" );?? ????????return ?pool.getResource();?? ????}??
[java] ?view plaincopy
public ? class ?SerializeUtil?{?? ????public ? static ? byte []?serialize(Object?object)?{?? ????????ObjectOutputStream?oos?=?null ;?? ????????ByteArrayOutputStream?baos?=?null ;?? ????????try ?{?? ?????????? ????????baos?=?new ?ByteArrayOutputStream();?? ????????oos?=?new ?ObjectOutputStream(baos);?? ????????oos.writeObject(object);?? ????????byte []?bytes?=?baos.toByteArray();?? ????????return ?bytes;?? ????????}?catch ?(Exception?e)?{?? ?????????e.printStackTrace();?? ????????}?? ????????return ? null ;?? ????????}?? ??????????? ????????public ? static ?Object?unserialize( byte []?bytes)?{?? ????????ByteArrayInputStream?bais?=?null ;?? ????????try ?{?? ?????????? ????????bais?=?new ?ByteArrayInputStream(bytes);?? ????????ObjectInputStream?ois?=?new ?ObjectInputStream(bais);?? ????????return ?ois.readObject();?? ????????}?catch ?(Exception?e)?{?? ??????????? ????????}?? ????????return ? null ;?? ????????}??
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,按他的方式?jīng)]配置成功,按上面的方式修改后成功
總結(jié)
以上是生活随笔 為你收集整理的mybatis整合redis 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。