日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis整合redis

發(fā)布時(shí)間:2025/7/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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();??
  • ?????/**?The?ReadWriteLock.?*/????
  • ????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ò),歡迎將生活随笔推薦給好友。