Mybatis的缓存交给redis管理
标签(空格分隔): Mybatis redis
前言:
针对redis的单机版进行缓存设置
一、导入相关jar
二、实现过程
用到jedisUtils工具类
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisUtils { private static JedisPool jedisPool; static { JedisPoolConfig jedisConfig = new JedisPoolConfig(); jedisConfig.setMaxTotal(100); jedisConfig.setMaxIdle(10); jedisConfig.setMaxWaitMillis(100); jedisPool = new JedisPool(jedisConfig, "192.168.0.118", 6379); } public static Jedis getJedis() { return jedisPool.getResource(); } public static void close(Jedis jedis) { jedis.close(); } }
实现Mybatis的Cache
import java.io.Serializable; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.commons.lang3.SerializationUtils; import org.apache.ibatis.cache.Cache; import com.baizhi.util.JedisUtils; public class MyBatisCache implements Cache{ private String id; private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); public MyBatisCache(String id){ this.id = id; } public String getId() { return id; } public int getSize() { Long size = JedisUtils.getJedis().dbSize(); return size.intValue(); } public void putObject(Object key, Object value) { JedisUtils.getJedis().set(SerializationUtils.serialize((Serializable)key), SerializationUtils.serialize((Serializable)value)); } public Object getObject(Object key) { byte[] bs = JedisUtils.getJedis().get(SerializationUtils.serialize((Serializable)key)); if(bs == null){ return null; } return SerializationUtils.deserialize(bs); } public Object removeObject(Object key) { byte[] bs = JedisUtils.getJedis().get(SerializationUtils.serialize((Serializable)key)); JedisUtils.getJedis().del(SerializationUtils.serialize((Serializable)key)); return SerializationUtils.deserialize(bs); } public void clear() { JedisUtils.getJedis().flushDB(); } public ReadWriteLock getReadWriteLock() { return readWriteLock; } }
开启Mybatis的全局缓存
mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" > <configuration> <settings> <!-- 开启全局的缓存 --> <setting name="cacheEnabled" value="true"/> </settings> </configuration>
在需要缓存的xxxxmapper.xml中开启缓存
<cache type="com.xxxx.cache.mybatis.MyBatisCache"/>
一定要将实体进行序列化,因为缓存的存储过程中要进行数据的序列化
在spring对SQLSessionFactory的管理中配置
<!-- 创建SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> ... //配置开启全局的缓存 <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean>