`

mybatis整合redis

阅读更多

     mybatis默认缓存是PerpetualCache,可以查看一下它的源码,发现其是Cache接口的实现;那么我们的缓存只要实现该接口即可。

   该接口有以下方法需要实现:

   String getId();
   int getSize();
   void putObject(Object key, Object value);
   Object getObject(Object key);
   Object removeObject(Object key);
   void clear();
   ReadWriteLock getReadWriteLock();

1、实现Cache接口

import com.sf.sfbuy.utils.SerializeUtil;
import org.apache.ibatis.cache.Cache;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class RedisCache implements Cache {
    private final String id;
    private Jedis redisClient;
    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    private Jedis createReids() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        JedisPool pool = new JedisPool(poolConfig, "10.122.66.166");
        try {
        	return pool.getResource();
        } catch (Exception e) {
        	e.printStackTrace();
        }
        return null;
    }

    public RedisCache(String id) {
        this.id = id;
        if (redisClient == null) {
            redisClient = createReids();
        }
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public int getSize() {
        if (redisClient == null) {
            return 0;
        }
        return Integer.valueOf(redisClient.dbSize().toString());
    }

    @Override
    public void putObject(Object key, Object value) {
        if (redisClient != null && key!=null) {
            redisClient.set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value));
        }
    }

    @Override
    public Object getObject(Object key) {
        if (redisClient == null || key==null) {
            return null;
        }
        Object value = SerializeUtil.unserialize(redisClient.get(SerializeUtil.serialize(key.toString())));
        System.err.println(getSize());
        return value;
    }

    @Override
    public Object removeObject(Object key) {
        if (redisClient != null) {
            return redisClient.expire(SerializeUtil.serialize(key.toString()), 0);
        }
        return null;
    }

    @Override
    public void clear() {
        if (redisClient != null) {
            redisClient.flushDB();
        }
    }

    @Override
    public ReadWriteLock getReadWriteLock() {
        return readWriteLock;
    }
}

 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

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 在需要加缓存的sqlMap中加入<cache eviction="LRU" type="com.tzz.cache.RedisCache" />

例:

<?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.tzz.web.mapper.article.ArticleMapper">
    <resultMap type="com.tzz.cacheableEntity.Article" id="article">
        <result property="id" column="ID"/>
        <result property="language" column="LANGUAGE" />
        <result property="status" column="STATUS" />
        <result property="editionPositionId" column="EDITION_POSITION_ID" />
        <result property="columnName" column="COLUMN_NAME" />
		<result property="editionPositionName" column="EDITION_POSITION_NAME" />
        <result property="articleTitle" column="ARTICLE_TITLE" />
        <result property="sortNum" column="SORT_NUM" />
        <result property="articleContent" column="ARTICLE_CONTENT" jdbcType="CLOB"  javaType = "java.lang.String" />
		<result property="remark" column="REMARK" />
		<result property="createBy" column="CREATE_BY" />
		<result property="createTm" column="CREATE_TM" />
		<result property="modifiedTm" column="MODIFIED_TM" />
    </resultMap>
<!-- 缓存 -->
	<cache
			eviction="LRU"
			size="100"
			readOnly="true"
			type="com.tzz.cache.RedisCache"
	/>
<!-- 查询 -->
	<select id="getListByEpiAndLanguage"  resultMap="article">
	    select ta.id, ta.language, ta.status, ta.edition_position_id, 
	        ta.article_title, ta.remark, ta.sort_num, ta.article_content, ta.create_by,
	        to_char(ta.create_tm, 'yyyy-MM-dd') as create_tm,
	        to_char(ta.modified_tm, 'yyyy-MM-dd') as modified_tm 
	        from TAB_ARTICLE ta 
	         <where>
				<if test="editionPositionId != '' and editionPositionId != null">    
					and ta.edition_position_id = #{editionPositionId, jdbcType=VARCHAR} 
				</if>
				<if test="language != '' and language != null">    
					and ta.language = #{language, jdbcType=VARCHAR} 
				</if>
			</where>
			order by ta.sort_num asc
	</select>
    
</mapper>

 

 

分享到:
评论

相关推荐

    Spring SpringMVC Mybatis 整合 Redis

    Spring SpringMVC Mybatis 整合 Redis .........................................................................................

    springMybatis+redis三级缓存框架

    "springMybatis+redis三级缓存框架"是一个高效且灵活的解决方案,它将MyBatis的二级缓存与Redis相结合,形成一个三级缓存体系,以优化数据读取速度并减轻数据库压力。 首先,MyBatis作为一款轻量级的持久层框架,其...

    springmvc+mybatis整合redis

    为了整合Redis,我们需要在MyBatis的拦截器中加入缓存管理,例如使用Spring的Cache抽象。 3. **实现缓存策略**:在Spring中,你可以利用`@Cacheable`、`@CacheEvict`等注解来声明方法的缓存行为。比如,当一个查询...

    springboot整合redis、mybatis以及redis和mybatis的联合使用

    springboot集成redis、mybatis 1、集成redis 2、集成mybatis 3、自定义redis KEY生成器/CacheManager来管理redis缓存 4、分布式redis-session共享 5、springboot实现初始化加载配置(实现缓存预热)的两种方式 6、二...

    mybatis-redis-1.0.0-beta2.jar 用于整合mybatis和redis

    http://a623939400.blog.163.com/blog/static/130504157201632741656560/ 附送maven教程

    mybatis+redis缓存配置

    ### MyBatis与Redis缓存配置详解 #### 一、MyBatis缓存机制概述 在MyBatis中,缓存是一项重要的性能优化措施。它能够显著减少数据库的访问次数,提高应用程序的响应速度。MyBatis提供了两种级别的缓存支持:一级...

    springmvc+mybatis+redis

    总结来说,"springmvc+mybatis+redis"的整合是现代Web开发中常见的技术栈组合,它利用SpringMVC提供灵活的控制层,MyBatis简化数据库操作,而Redis则通过高效的缓存机制优化了数据访问性能。这种组合能够帮助开发者...

    spring+springmvc+mybatis+redis框架

    Spring、SpringMVC、MyBatis和Redis是四个在Java Web开发中广泛应用的框架和技术。它们各自承担着不同的职责,组合在一起可以构建出高效、可维护的Web应用程序。 Spring框架是Java企业级应用的核心框架,它提供了一...

    spring+mybatis整合redis所需jar包

    包含:commons-pool2-2.5.0.jar、jedis-2.5.0.jar、mybatis-ehcache-1.0.3.jar、spring-data-redis-1.2.0.RELEASE.jar

    springboot案例,springboot+mybatis整合,springboot+mybatis+redis集群

    #### Spring Boot + MyBatis + Redis 整合开发 1. **Redis 单机版**: - 启动 Redis 服务器。 - 在 `application.properties` 文件中配置 Redis 服务器地址、端口号等信息。 - 导入 `spring-boot-starter-data-...

    mybatis与redis整合示例

    mybatis与redis的简单整合示例,供大家学习参考,内含完整maven工程。 博客内容地址:https://blog.csdn.net/magi1201/article/details/85635878

    SpringBoot + Mybatis + Redis 整合

    总的来说,SpringBoot、Mybatis和Redis的整合为Java开发者提供了一个强大、灵活且高效的开发环境,它可以帮助我们构建出高可用、高性能的Web应用。通过深入理解这三个组件以及它们之间的协同工作,开发者可以更好地...

    springboot2.X+mybatis+redis

    通过这个"springBoot2.X_MyBatis_Redis_demo"项目,你可以实践如何在Spring Boot中整合MyBatis和Redis,了解它们如何协同工作以提高应用的性能和响应速度。此外,这个项目也可以作为一个基础模板,帮助你快速开发...

    maven+springmvc+redis+mybatis整合

    本项目以“maven+springmvc+redis+mybatis整合”为主题,旨在提供一个基于这些技术的集成框架,特别强调了利用Redis作为缓存来提升应用性能。下面将详细阐述这个框架中的各个组成部分以及它们之间的协作。 首先,...

    spring+mybatis+redis整合.docx

    Spring+MyBatis+Redis整合 Title:Spring+MyBatis+Redis整合 Description:Spring+MyBatis+Redis整合 Tag:MyBatis Spring Redis 内容摘要: 本文主要讲述了如何将Spring、MyBatis和Redis三者进行整合,以解决...

    springboot+mybatis+redis+thymeleaf学习整合web项目demo源码

    这是一个基于Spring Boot、MyBatis、Redis和Thymeleaf技术栈构建的Web项目示例。这个源码库提供了一个全面的学习平台,帮助开发者理解如何将这些流行的技术整合到一个实际的应用中。以下是对这些技术及其整合方式的...

    springboot+security+mybatis+redis+jwt,鉴权框架搭建

    本项目集成了springboot+security+mybatis+redis+jwt用于学习security鉴权功能,其中有集成了redis,mybatis,jasypt,jwt,thymeleaf,knife4j,mybatis-plus 项目搭建已经比较成熟,能够直接进行使用,通过代码...

    redis-cache-mybatis-redis-1.0.0-beta2.zip

    redis-cache-mybatis-redis-1.0.0-beta1.zip redis-cache-mybatis-redis-1.0.0-beta1.tar.gz Mybatis 整合 Redis 实现分布式缓存。

    redis-cache-mybatis-redis-1.0.0-beta1.zip

    redis-cache-mybatis-redis-1.0.0-beta1.zip redis-cache-mybatis-redis-1.0.0-beta1.tar.gz Mybatis 整合 Redis 实现分布式缓存。

    Shiro整合springMvc+Mybatis+Redis demo源码下载.zip

    2. **Mybatis整合Shiro**: - Mybatis是一个轻量级的持久层框架,用于简化数据库操作。在Shiro中,我们通常使用Mybatis来存储和检索用户的认证和授权信息。 - 配置Shiro的`UserRealm`,实现自定义的数据源,例如从...

Global site tag (gtag.js) - Google Analytics