mybatis二级缓存用redis实现
来源:互联网 发布:淘宝上的whoo后真吗 编辑:程序博客网 时间:2024/05/22 09:05
第一步:自己实现缓存类,实现Cache接口,重写方法,导入jedis.jar
JedisCache类
public class JedisCache implements Cache {/** * 序列化和反序列化的操作类 * @author Administrator * */static class SeqUtils{/** * 反序列化为对象 * @param bt * @return * @throws ClassNotFoundException * @throws IOException */public static Object deSer(byte[] bt) throws ClassNotFoundException, IOException{ByteArrayInputStream bais=new ByteArrayInputStream(bt);ObjectInputStream ois=new ObjectInputStream(bais);return ois.readObject();}/** * 对象序列化成字节数组 * @param obj * @return * @throws IOException */public static byte[] ser(Object obj) throws IOException{ByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream obos=new ObjectOutputStream(baos);obos.writeObject(obj);return baos.toByteArray();}}static JedisPool jp=null;private String id;/** * 当查询时 自动实例化JedisCache * id 其实mapper查询的id * @param id */public JedisCache(String id) {if(jp==null){try {GenericObjectPoolConfig gopc=new GenericObjectPoolConfig();gopc.setMaxTotal(100);gopc.setMaxIdle(10);jp=new JedisPool(gopc, "localhost");jp.getResource();} catch (Exception e) {//e.printStackTrace();jp=null;}}this.id=id;}/** * 清空所有缓存 */public void clear() {Jedis jedis=jp.getResource();jedis.flushAll();jp.returnResourceObject(jedis);}public String getId() {// TODO Auto-generated method stubreturn id;}/** * mybatis自动调用该方法 判断返回值是否为null * 如果为空 自动查询数据库 * 不为空 直接使用 返回的对象 * key 才是 传入当前查询的oid 主键 */public Object getObject(Object key) {if(jp==null){return null;}Jedis jedis=jp.getResource();try {byte[] bt=jedis.get(SeqUtils.ser(key));if(bt!=null){Object obj=SeqUtils.deSer(bt);//将redis对象 回收到连接池 jp.returnResourceObject(jedis);return obj;}} catch (Exception e) {e.printStackTrace();}return null;}/** * newio non-blocking io */public ReadWriteLock getReadWriteLock() {return new ReentrantReadWriteLock();}/** * 用于读取 redis中缓存了多少元素 */public int getSize() {Jedis jedis=jp.getResource();Set<String> alllElemebts=jedis.keys("*");return alllElemebts.size();}/** * 第一次查询数据库后 mybatis会自动调用 该方法将数据写入缓存 */public void putObject(Object key, Object value) {if(jp==null){return;}Jedis jedis=jp.getResource();try {jedis.set(SeqUtils.ser(key),SeqUtils.ser(value));jedis.save();jp.returnResourceObject(jedis);} catch (IOException e) {e.printStackTrace();}}/** * 调用了mybatis flush方法自动清空缓存 * 自动调用removeObject 需要从redis中删除该元素 */public Object removeObject(Object key) {Jedis jedis=jp.getResource();try {jedis.del(SeqUtils.ser(key));jp.returnResourceObject(jedis);} catch (IOException e) {e.printStackTrace();}return null;}}
第二步:接口映射文件中加入<cache type="自定义的缓存类"/>
<?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"><!-- 接口映射关注点 namespace必须和接口的类全路径一致 --><mapper namespace="cn.et.mybatis.lesson05.EmpMapper"> <!-- 表示使用二级缓存 --> <cache type="cn.et.mybatis.lesson05.JedisCache"></cache> <select id="selectByWhere" resultType="cn.et.mybatis.lesson04.genernator.entity.Emp"> select * from emp where empNo=#{0} </select> </mapper>
阅读全文
0 0
- mybatis二级缓存用redis实现
- redis实现mybatis二级缓存
- mybatis redis 实现二级缓存
- mybatis+redis+mybatis-redis实现二级缓存
- Redis实现Mybatis的二级缓存
- Redis实现Mybatis的二级缓存
- Redis实现Mybatis的二级缓存
- Mybatis采用redis实现二级缓存
- mybatis+redis二级缓存
- mybatis + spring + redis(二级缓存)整合
- Mybatis使用Redis做二级缓存
- Spring Boot + Mybatis + Redis二级缓存
- Spring Boot + Mybatis + Redis二级缓存
- mybatis使用redis做二级缓存
- 使用Redis做Mybatis二级缓存
- Spring Boot + Mybatis + Redis二级缓存
- redis做mybatis的二级缓存
- mybatis使用redis做二级缓存
- 微信小程序智能生活小秘书开发
- Velocity #parse与#include区别以及权限
- javaweb的一些记录
- php超全局变量、魔术变量、魔术函数
- 排序算法稳定性
- mybatis二级缓存用redis实现
- Let the Balloon Rise (map)
- I
- thymeleaf常用的一些标签属性
- WAS常用语句
- 程序员必看的那些电影
- thinkphp设计模式讲解
- ViewPager的简单描述及使用
- Android 6.0 运行时权限管理最佳实践 (详解)