From b78d03b75108458c0239d6343e202e1a39024285 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Fri, 12 Apr 2024 16:41:58 +0800 Subject: [PATCH] =?UTF-8?q?:truck:=20=E5=8E=BB=E9=99=A4=20cache=20query.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/FilterOrderConst.java | 2 - .../OrionMybatisAutoConfiguration.java | 12 --- .../mybatis/core/cache/CacheClearFilter.java | 31 ------ .../mybatis/core/cache/CacheHolder.java | 61 ------------ .../mybatis/core/mapper/IMapper.java | 21 ---- .../mybatis/core/query/CacheQuery.java | 95 ------------------- 6 files changed, 222 deletions(-) delete mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheClearFilter.java delete mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheHolder.java delete mode 100644 orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/CacheQuery.java diff --git a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FilterOrderConst.java b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FilterOrderConst.java index 24910615..112fee6e 100644 --- a/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FilterOrderConst.java +++ b/orion-ops-framework/orion-ops-framework-common/src/main/java/com/orion/ops/framework/common/constant/FilterOrderConst.java @@ -13,6 +13,4 @@ public interface FilterOrderConst { int CORS_FILTER = Integer.MIN_VALUE + 2000; - int MYBATIS_CACHE_CLEAR_FILTER = Integer.MIN_VALUE + 100000; - } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/configuration/OrionMybatisAutoConfiguration.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/configuration/OrionMybatisAutoConfiguration.java index 0b51e0ee..4a331acb 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/configuration/OrionMybatisAutoConfiguration.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/configuration/OrionMybatisAutoConfiguration.java @@ -4,17 +4,13 @@ import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.orion.ops.framework.common.constant.AutoConfigureOrderConst; -import com.orion.ops.framework.common.constant.FilterOrderConst; -import com.orion.ops.framework.common.web.filter.FilterCreator; import com.orion.ops.framework.common.security.SecurityHolder; -import com.orion.ops.framework.mybatis.core.cache.CacheClearFilter; import com.orion.ops.framework.mybatis.core.handler.FieldFillHandler; import com.orion.ops.framework.mybatis.core.utils.DomainFillUtils; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureOrder; -import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; /** @@ -51,12 +47,4 @@ public class OrionMybatisAutoConfiguration { return interceptor; } - /** - * @return mybatis 缓存清理过滤器 - */ - @Bean - public FilterRegistrationBean rowCacheClearFilterBean() { - return FilterCreator.create(new CacheClearFilter(), FilterOrderConst.MYBATIS_CACHE_CLEAR_FILTER); - } - } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheClearFilter.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheClearFilter.java deleted file mode 100644 index 9b2f8989..00000000 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheClearFilter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.orion.ops.framework.mybatis.core.cache; - -import org.springframework.web.filter.OncePerRequestFilter; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -/** - * mybatis 缓存清理过滤器 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023/6/25 15:14 - */ -public class CacheClearFilter extends OncePerRequestFilter { - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - try { - // 执行请求 - filterChain.doFilter(request, response); - } finally { - // 清理缓存 - CacheHolder.remove(); - } - } - -} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheHolder.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheHolder.java deleted file mode 100644 index 6773b6da..00000000 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/cache/CacheHolder.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.orion.ops.framework.mybatis.core.cache; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.orion.lang.define.collect.MultiHashMap; -import com.orion.lang.define.wrapper.Ref; - -import java.io.Serializable; - -/** - * 缓存行持有者 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023/6/25 14:21 - */ -public class CacheHolder { - - private CacheHolder() { - } - - /** - * 缓存 - *

- * key: mapper - * value: id > row - */ - private static final ThreadLocal, Serializable, Ref>> HOLDER = ThreadLocal.withInitial(MultiHashMap::new); - - /** - * 获取缓存 - * - * @param mapper mapper - * @param id id - * @param domain - * @return cacheWrapper - */ - @SuppressWarnings("unchecked") - public static Ref get(BaseMapper mapper, Serializable id) { - return (Ref) HOLDER.get().get(mapper, id); - } - - /** - * 设置缓存 - * - * @param mapper mapper - * @param id id - * @param row row - * @param domainClass - */ - public static void set(BaseMapper mapper, Serializable id, T row) { - HOLDER.get().put(mapper, id, new Ref<>(row)); - } - - /** - * 清空缓存 - */ - public static void remove() { - HOLDER.remove(); - } - -} diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/mapper/IMapper.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/mapper/IMapper.java index a4f35734..fba5bcec 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/mapper/IMapper.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/mapper/IMapper.java @@ -3,11 +3,9 @@ package com.orion.ops.framework.mybatis.core.mapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.orion.ops.framework.mybatis.core.query.CacheQuery; import com.orion.ops.framework.mybatis.core.query.Conditions; import com.orion.ops.framework.mybatis.core.query.DataQuery; -import java.io.Serializable; import java.util.Collection; /** @@ -56,25 +54,6 @@ public interface IMapper extends BaseMapper { return DataQuery.of(this, wrapper); } - /** - * 获取 CacheQuery 对象 - * - * @return CacheQuery - */ - default CacheQuery cache() { - return CacheQuery.of(this); - } - - /** - * 获取 CacheQuery 对象 - * - * @param id id - * @return CacheQuery - */ - default CacheQuery cache(Serializable id) { - return CacheQuery.of(this, id); - } - /** * 批量插入 * diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/CacheQuery.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/CacheQuery.java deleted file mode 100644 index c9c413fd..00000000 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/CacheQuery.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.orion.ops.framework.mybatis.core.query; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.orion.lang.define.wrapper.Ref; -import com.orion.lang.utils.Valid; -import com.orion.ops.framework.mybatis.core.cache.CacheHolder; - -import java.io.Serializable; -import java.util.Optional; -import java.util.function.Function; - -/** - * 缓存查询器 - *

- * 查询会存入缓存 - * - * @author Jiahang Li - * @version 1.0.0 - * @since 2023/6/25 13:05 - */ -public class CacheQuery { - - private final BaseMapper dao; - - private Serializable id; - - private boolean force; - - private CacheQuery(BaseMapper dao, Serializable id) { - this.dao = dao; - this.id = id; - } - - public static CacheQuery of(BaseMapper dao) { - Valid.notNull(dao, "dao is null"); - return new CacheQuery<>(dao, null); - } - - public static CacheQuery of(BaseMapper dao, Serializable id) { - Valid.notNull(dao, "dao is null"); - Valid.notNull(id, "id is null"); - return new CacheQuery<>(dao, id); - } - - /** - * 设置 id - * - * @param id id - * @return this - */ - public CacheQuery id(Serializable id) { - this.id = id; - return this; - } - - /** - * 强制查询 - * - * @param id id - * @return this - */ - public CacheQuery force(Serializable id) { - this.force = true; - this.id = id; - return this; - } - - public Optional optional(Function mapper) { - Valid.notNull(mapper, "convert function is null"); - return Optional.ofNullable(this.get()) - .map(mapper); - } - - public Optional optional() { - return Optional.ofNullable(this.get()); - } - - public T get() { - // 不查询缓存 - if (!force) { - // 从缓存中获取 - Ref ref = CacheHolder.get(dao, id); - // 命中直接返回 - if (ref != null) { - return ref.get(); - } - } - // 查询 - T row = dao.selectById(id); - // 设置缓存 - CacheHolder.set(dao, id, row); - return row; - } - -}