工具类
package com.baizhi.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextUtils implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static Object getBean(String id){
return context.getBean(id);
}
public static Object getBean(Class clazz){
return context.getBean(clazz);
}
public static Object getBean(String id,Class clazz){
return context.getBean(id,clazz);
}
}
缓存类
package com.baizhi.cache;
import com.baizhi.util.ApplicationContextUtils;
import org.apache.ibatis.cache.Cache;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class RedisCache implements Cache {
private final String id;
public RedisCache(String id){
this.id = id;
}
@Override
public String getId() {
return id;
}
@Override
public void putObject(Object key, Object value) {
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate", RedisTemplate.class);
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.opsForHash().put(id.toString(),key,value);
}
@Override
public Object getObject(Object key) {
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate", RedisTemplate.class);
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
return redisTemplate.opsForHash().get(id.toString(),key);
}
@Override
public Object removeObject(Object key) {
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate", RedisTemplate.class);
Long delete = redisTemplate.opsForHash().delete(id.toString(), key);
return delete;
}
@Override
public void clear() {
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate", RedisTemplate.class);
redisTemplate.delete(id.toString());
}
@Override
public int getSize() {
RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate", RedisTemplate.class);
int size = redisTemplate.opsForHash().size(id.toString()).intValue();
return size;
}
@Override
public ReadWriteLock getReadWriteLock() {
return new ReentrantReadWriteLock();
}
}
mapper文件中引入缓存类
<?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.baizhi.dao.DeptDao">
<cache type="com.baizhi.cache.RedisCache"></cache>
</mapper>