使用 mybatis 配置自定义二级缓存,使用 xml 注解可用
<cache type="com.test.dao.MybatisRedisCache" />
可成功使用自定义缓存,而使用在 dao 接口上注解@CacheNamespace(implementation = MybatisRedisCache.class)
则不行,(会进自定义缓存类的构造方法,但不能存值,取值);自定义缓存类
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("127.0.0.1", 6379);
return pool.getResource();
}
}
dao 接口
@CacheNamespace(implementation = (MybatisRedisCache.class))
public interface DaoTest {
@Options(useCache = true)
public List<PeoplePo> getUser(PeopleVo p);
}
xml 映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.dao.DaoTest">
<select id="getUser" resultType="com.test.bean.PeoplePo" parameterType="com.test.bean.PeopleVo">
select t_user.* from t_user where t_user.t_user_id = #{tUserId}
</select>
</mapper>
楼主解决了吗 , 我也是不行,加了一个中转调用的才行