From 24da85fea353960420d370cd6a50ee7be4d7ef32 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期四, 10 六月 2021 21:18:58 +0800
Subject: [PATCH] update MybatisPlus整合Redis二级缓存
---
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java | 5 ++
ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java | 5 ++
ruoyi-generator/src/main/resources/vm/java/mapper.java.vm | 3 +
4 files changed, 113 insertions(+), 2 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java
new file mode 100644
index 0000000..6ff6a98
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/MybatisPlusRedisCache.java
@@ -0,0 +1,102 @@
+package com.ruoyi.common.core.mybatisplus;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.ruoyi.common.core.redis.RedisCache;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.cache.Cache;
+import org.springframework.data.redis.connection.RedisServerCommands;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Collection;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * mybatis-redis 浜岀骇缂撳瓨
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class MybatisPlusRedisCache implements Cache {
+
+ private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true);
+
+ private RedisCache redisCache;
+
+ private String id;
+
+ public MybatisPlusRedisCache(final String id) {
+ if (id == null) {
+ throw new IllegalArgumentException("Cache instances require an ID");
+ }
+ this.id = id;
+ }
+
+ @Override
+ public String getId() {
+ return this.id;
+ }
+
+ @Override
+ public void putObject(Object key, Object value) {
+ if (redisCache == null) {
+ redisCache = SpringUtil.getBean(RedisCache.class);
+ }
+ if (value != null) {
+ redisCache.setCacheObject(key.toString(), value);
+ }
+ }
+
+ @Override
+ public Object getObject(Object key) {
+ if (redisCache == null) {
+ //鐢变簬鍚姩鏈熼棿娉ㄥ叆澶辫触锛屽彧鑳借繍琛屾湡闂存敞鍏ワ紝杩欐浠g爜鍙互鍒犻櫎
+ redisCache = SpringUtil.getBean(RedisCache.class);
+ }
+ try {
+ if (key != null) {
+ return redisCache.getCacheObject(key.toString());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("缂撳瓨鍑洪敊");
+ }
+ return null;
+ }
+
+ @Override
+ public Object removeObject(Object key) {
+ if (redisCache == null) {
+ redisCache = SpringUtil.getBean(RedisCache.class);
+ }
+ if (key != null) {
+ redisCache.deleteObject(key.toString());
+ }
+ return null;
+ }
+
+ @Override
+ public void clear() {
+ log.debug("娓呯┖缂撳瓨");
+ if (redisCache == null) {
+ redisCache = SpringUtil.getBean(RedisCache.class);
+ }
+ Collection<String> keys = redisCache.keys("*:" + this.id + "*");
+ if (!CollectionUtils.isEmpty(keys)) {
+ redisCache.deleteObject(keys);
+ }
+ }
+
+ @Override
+ public int getSize() {
+ RedisTemplate<String, Object> redisTemplate = SpringUtil.getBean("redisTemplate");
+ Long size = redisTemplate.execute(RedisServerCommands::dbSize);
+ return size.intValue();
+ }
+
+ @Override
+ public ReadWriteLock getReadWriteLock() {
+ return this.readWriteLock;
+ }
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java
index 2416f0e..5cfb9f6 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java
@@ -1,7 +1,9 @@
package com.ruoyi.demo.mapper;
-import com.ruoyi.demo.domain.TestDemo;
+import com.ruoyi.common.core.mybatisplus.MybatisPlusRedisCache;
import com.ruoyi.common.core.page.BaseMapperPlus;
+import com.ruoyi.demo.domain.TestDemo;
+import org.apache.ibatis.annotations.CacheNamespace;
/**
* 娴嬭瘯鍗曡〃Mapper鎺ュ彛
@@ -9,6 +11,7 @@
* @author Lion Li
* @date 2021-05-30
*/
+@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
public interface TestDemoMapper extends BaseMapperPlus<TestDemo> {
}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java
index 6dd75c5..0635ebc 100644
--- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestTreeMapper.java
@@ -1,7 +1,9 @@
package com.ruoyi.demo.mapper;
-import com.ruoyi.demo.domain.TestTree;
+import com.ruoyi.common.core.mybatisplus.MybatisPlusRedisCache;
import com.ruoyi.common.core.page.BaseMapperPlus;
+import com.ruoyi.demo.domain.TestTree;
+import org.apache.ibatis.annotations.CacheNamespace;
/**
* 娴嬭瘯鏍戣〃Mapper鎺ュ彛
@@ -9,6 +11,7 @@
* @author Lion Li
* @date 2021-05-30
*/
+@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
public interface TestTreeMapper extends BaseMapperPlus<TestTree> {
}
diff --git a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
index 6008418..36a9864 100644
--- a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
+++ b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
@@ -2,6 +2,8 @@
import ${packageName}.domain.${ClassName};
import com.ruoyi.common.core.page.BaseMapperPlus;
+import com.ruoyi.common.core.mybatisplus.MybatisPlusRedisCache;
+import org.apache.ibatis.annotations.CacheNamespace;
/**
* ${functionName}Mapper鎺ュ彛
@@ -9,6 +11,7 @@
* @author ${author}
* @date ${datetime}
*/
+@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class)
public interface ${ClassName}Mapper extends BaseMapperPlus<${ClassName}> {
}
--
Gitblit v1.9.3