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 .........................................................................................
"springMybatis+redis三级缓存框架"是一个高效且灵活的解决方案,它将MyBatis的二级缓存与Redis相结合,形成一个三级缓存体系,以优化数据读取速度并减轻数据库压力。 首先,MyBatis作为一款轻量级的持久层框架,其...
为了整合Redis,我们需要在MyBatis的拦截器中加入缓存管理,例如使用Spring的Cache抽象。 3. **实现缓存策略**:在Spring中,你可以利用`@Cacheable`、`@CacheEvict`等注解来声明方法的缓存行为。比如,当一个查询...
springboot集成redis、mybatis 1、集成redis 2、集成mybatis 3、自定义redis KEY生成器/CacheManager来管理redis缓存 4、分布式redis-session共享 5、springboot实现初始化加载配置(实现缓存预热)的两种方式 6、二...
http://a623939400.blog.163.com/blog/static/130504157201632741656560/ 附送maven教程
### MyBatis与Redis缓存配置详解 #### 一、MyBatis缓存机制概述 在MyBatis中,缓存是一项重要的性能优化措施。它能够显著减少数据库的访问次数,提高应用程序的响应速度。MyBatis提供了两种级别的缓存支持:一级...
总结来说,"springmvc+mybatis+redis"的整合是现代Web开发中常见的技术栈组合,它利用SpringMVC提供灵活的控制层,MyBatis简化数据库操作,而Redis则通过高效的缓存机制优化了数据访问性能。这种组合能够帮助开发者...
Spring、SpringMVC、MyBatis和Redis是四个在Java Web开发中广泛应用的框架和技术。它们各自承担着不同的职责,组合在一起可以构建出高效、可维护的Web应用程序。 Spring框架是Java企业级应用的核心框架,它提供了一...
包含: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
#### Spring Boot + MyBatis + Redis 整合开发 1. **Redis 单机版**: - 启动 Redis 服务器。 - 在 `application.properties` 文件中配置 Redis 服务器地址、端口号等信息。 - 导入 `spring-boot-starter-data-...
mybatis与redis的简单整合示例,供大家学习参考,内含完整maven工程。 博客内容地址:https://blog.csdn.net/magi1201/article/details/85635878
总的来说,SpringBoot、Mybatis和Redis的整合为Java开发者提供了一个强大、灵活且高效的开发环境,它可以帮助我们构建出高可用、高性能的Web应用。通过深入理解这三个组件以及它们之间的协同工作,开发者可以更好地...
通过这个"springBoot2.X_MyBatis_Redis_demo"项目,你可以实践如何在Spring Boot中整合MyBatis和Redis,了解它们如何协同工作以提高应用的性能和响应速度。此外,这个项目也可以作为一个基础模板,帮助你快速开发...
本项目以“maven+springmvc+redis+mybatis整合”为主题,旨在提供一个基于这些技术的集成框架,特别强调了利用Redis作为缓存来提升应用性能。下面将详细阐述这个框架中的各个组成部分以及它们之间的协作。 首先,...
Spring+MyBatis+Redis整合 Title:Spring+MyBatis+Redis整合 Description:Spring+MyBatis+Redis整合 Tag:MyBatis Spring Redis 内容摘要: 本文主要讲述了如何将Spring、MyBatis和Redis三者进行整合,以解决...
这是一个基于Spring Boot、MyBatis、Redis和Thymeleaf技术栈构建的Web项目示例。这个源码库提供了一个全面的学习平台,帮助开发者理解如何将这些流行的技术整合到一个实际的应用中。以下是对这些技术及其整合方式的...
本项目集成了springboot+security+mybatis+redis+jwt用于学习security鉴权功能,其中有集成了redis,mybatis,jasypt,jwt,thymeleaf,knife4j,mybatis-plus 项目搭建已经比较成熟,能够直接进行使用,通过代码...
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.tar.gz Mybatis 整合 Redis 实现分布式缓存。
2. **Mybatis整合Shiro**: - Mybatis是一个轻量级的持久层框架,用于简化数据库操作。在Shiro中,我们通常使用Mybatis来存储和检索用户的认证和授权信息。 - 配置Shiro的`UserRealm`,实现自定义的数据源,例如从...