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 实现类:
- package app.platform.mybatis
- import java.util.concurrent.locks.ReadWriteLock;
- import java.util.concurrent.locks.ReentrantReadWriteLock;
- import org.apache.ibatis.cache.Cache;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
- public class MybatisRedisCache implements Cache {
- private static Logger logger = LoggerFactory.getLogger(MybatisRedisCache.class);
- private Jedis redisClient=createReids();
- /** The ReadWriteLock. */
- private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
- private String id;
- public MybatisRedisCache(final String id) {
- if (id == null) {
- throw new IllegalArgumentException("Cache instances require an ID");
- }
- logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>MybatisRedisCache:id="+id);
- this.id = id;
- }
- @Override
- public String getId() {
- return this.id;
- }
- @Override
- public int getSize() {
- return Integer.valueOf(redisClient.dbSize().toString());
- }
- @Override
- public void putObject(Object key, Object value) {
- logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject:"+key+"="+value);
- redisClient.set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value));
- }
- @Override
- public Object getObject(Object key) {
- Object value = SerializeUtil.unserialize(redisClient.get(SerializeUtil.serialize(key.toString())));
- logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>getObject:"+key+"="+value);
- return value;
- }
- @Override
- public Object removeObject(Object key) {
- return redisClient.expire(SerializeUtil.serialize(key.toString()),0);
- }
- @Override
- public void clear() {
- redisClient.flushDB();
- }
- @Override
- public ReadWriteLock getReadWriteLock() {
- return readWriteLock;
- }
- protected static Jedis createReids(){
- JedisPool pool = new JedisPool(new JedisPoolConfig(), "10.12.162.85");
- return pool.getResource();
- }
- 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 spring中的mybatis配置
<!-- mybatis配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:app/mapper/**/*.xml"/>
<property name="configLocation" value="classpath:/mybatis/mybatis-config.xml" />
</bean>
3 mybatis-config.xml 中的settings配制
<settings>
<!-- 开启缓存支持 -->
<setting name="cacheEnabled" value="true" />
.......
</settings>
4 在需要加缓存的sqlMap中加入<cache eviction="LRU" type="app.platform.mybatis.MybatisRedisCache" />
例:
<mapper namespace="SYS_ROLE">
<!-- 缓存 -->
<cache eviction="LRU" type="app.platform.mybatis.MybatisRedisCache" />
<!-- 查询所有 -->
<select id="findAll" parameterType="HashMap" resultType="HashMap">
select
<include refid="base_column" />
from SYS_ROLE
where 1=1
<if test="BUS_TYPE!=null and BUS_TYPE!=''">
and BUS_TYPE =#{BUS_TYPE}
</if>
<if test="ENABLE!=null and ENABLE!=''">
and ENABLE =#{ENABLE}
</if>
<if test="ROLE_NAME!=null and ROLE_NAME!=''">
and ROLE_NAME like '%'||#{ROLE_NAME}||'%'
</if>
<if test="ROLE_OTHER_NAME!=null and ROLE_OTHER_NAME!=''">
and ROLE_OTHER_NAME like '%'||#{ROLE_OTHER_NAME}||'%'
</if>
</select>
</mapper>
本文参考了http://blog.csdn.net/nmgrlq/article/details/7996925,按他的方式没配置成功,按上面的方式修改后成功
相关推荐
MyBatis的二级缓存机制允许开发者自定义缓存实现,这就为我们使用Redis这样的分布式缓存系统提供了可能。Redis是一个高性能的键值存储系统,适合存储大量的字符串、列表、集合、哈希表等数据结构,并支持丰富的操作...
使用 Redis 实现点赞、关注功能,优化登录模块——存储登录凭证、缓存用户信息 【备注】 主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可作为课程设计、期末大作业。包含:项目源码、...
本示例旨在演示如何将四个核心组件——SpringMVC、MyBatis、Redis和Shiro整合在一起,以实现一个功能丰富的Web应用。下面我们将详细探讨这些技术以及它们在集成中的作用。 1. **SpringMVC**:SpringMVC是Spring框架...
【Spring Boot + Mybatis 整合详解】 Spring Boot 和 Mybatis 的整合是现代 Java 开发中的常见实践,它...在实际项目中,你可以根据需求进一步扩展,如集成 Swagger 进行 API 文档管理,或者引入 Redis 做缓存优化等。
本文将深入探讨如何在Spring+SpringMVC+MyBatis的环境下,结合Shiro和Redis实现一个完整的权限框架处理——ShiroDemo。 首先,Shiro的核心组件包括Subject、SecurityManager、Realms、Caching、Session管理和...
SpringBoot 搭建——整合 Redis 与 MyBatis 的实战指南 在现代的 Java 开发中,Spring Boot 已经成为了快速构建应用的首选框架,它极大地简化了 Spring 应用的初始设置和配置。本教程将详细介绍如何使用 Spring ...
本篇文章将围绕"javaStudy.rar"这个项目,详细解读其中涉及的关键技术点,包括SpringBoot的核心特性、Controller封装、异常处理、分页功能、MyBatis集成、Redis缓存、日志记录、过滤器机制以及Swagger的API文档自动...
6. **分布式技术**:了解分布式系统的基础知识,如缓存(Redis)、消息中间件(Kafka)、流处理(Storm)和协调服务(Zookeeper)。 7. **设计经验**:具备一定的Java应用开发经验,能够在项目中担任关键模块的设计...
- **分布式技术**:考虑到系统的复杂性和未来可能的增长,适当引入分布式技术,如缓存机制(Redis)、消息队列(RabbitMQ)等,提高系统的响应速度和并发处理能力。 **3. 系统架构设计** - **网络结构**:采用B/S...
- **Redis**:Spring Boot提供了对Redis缓存的支持,方便数据的快速读写。 6. **安全控制** - **Spring Security**:Spring Boot默认集成Spring Security,提供认证和授权功能。 - **JWT(JSON Web Tokens)**:...
1. 数据缓存:利用Redis等缓存技术,减少数据库访问,提高系统响应速度。 2. 日志管理:记录系统操作日志,便于问题排查和性能优化。 3. 模块化设计:将功能模块化,方便后期增加新功能或进行模块升级。 4. 响应...
使用缓存技术如Redis提高数据读取速度;采用分页查询减少数据库压力;同时,系统应该具有良好的模块化设计,以便未来添加新功能或进行维护。 总的来说,基于SSM+JSP的乡镇自来水收费系统是一个集成了现代Web开发...
- JPA或MyBatis:ORM框架的使用,事务管理,缓存机制。 10. **分布式系统**: - 分布式锁:Redis、Zookeeper实现的分布式锁机制。 - 分布式一致性:CAP理论,Paxos、Raft等一致性协议的理解。 这些知识点不仅...
- **缓存技术**:如Redis,用于提升数据访问速度。 9. **网络编程** - **TCP/IP协议**:理解网络通信的基本原理。 - **Socket编程**:实现简单的客户端和服务器程序。 - **HTTP协议**:了解HTTP请求和响应的...
1. **缓存机制**:引入Redis等缓存技术,减少对数据库的频繁访问,提高系统响应速度。 2. **并发控制**:使用乐观锁或悲观锁策略,解决多线程环境下数据一致性问题。 3. **数据库优化**:合理设计数据库表结构,建立...
此外,还可以通过缓存技术如Redis来减少对数据库的直接访问,提高系统响应速度。 综上所述,JAVA通讯录的实现不仅涉及到数据库的基本操作,还涵盖了代码简化和优化、反射机制的运用等多个层面。通过对这些知识点的...
- **Redis**或**Ehcache**:可能用于缓存高频访问数据,提高系统性能。 10. **测试**: - **JUnit**:单元测试框架,确保每个模块功能的正确性。 - **Mockito**:模拟对象,便于隔离测试。 通过深入分析这些源...
- 自定义启动配置。 - 微服务架构搭建。 - **最新SpringBoot整合篇** - Spring Boot与数据库整合。 - 安全性与认证支持。 - 云原生应用部署。 - **最新Mapper视频** - Mapper接口与映射文件关系。 - 动态...