🚚 去除 cache query.

This commit is contained in:
lijiahang
2024-04-12 16:41:58 +08:00
parent a4c5d25815
commit b78d03b751
6 changed files with 0 additions and 222 deletions

View File

@@ -13,6 +13,4 @@ public interface FilterOrderConst {
int CORS_FILTER = Integer.MIN_VALUE + 2000;
int MYBATIS_CACHE_CLEAR_FILTER = Integer.MIN_VALUE + 100000;
}

View File

@@ -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<CacheClearFilter> rowCacheClearFilterBean() {
return FilterCreator.create(new CacheClearFilter(), FilterOrderConst.MYBATIS_CACHE_CLEAR_FILTER);
}
}

View File

@@ -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();
}
}
}

View File

@@ -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() {
}
/**
* 缓存
* <p>
* key: mapper
* value: id > row
*/
private static final ThreadLocal<MultiHashMap<BaseMapper<?>, Serializable, Ref<?>>> HOLDER = ThreadLocal.withInitial(MultiHashMap::new);
/**
* 获取缓存
*
* @param mapper mapper
* @param id id
* @param <T> domain
* @return cacheWrapper
*/
@SuppressWarnings("unchecked")
public static <T> Ref<T> get(BaseMapper<?> mapper, Serializable id) {
return (Ref<T>) HOLDER.get().get(mapper, id);
}
/**
* 设置缓存
*
* @param mapper mapper
* @param id id
* @param row row
* @param <T> domainClass
*/
public static <T> void set(BaseMapper<T> mapper, Serializable id, T row) {
HOLDER.get().put(mapper, id, new Ref<>(row));
}
/**
* 清空缓存
*/
public static void remove() {
HOLDER.remove();
}
}

View File

@@ -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<T> extends BaseMapper<T> {
return DataQuery.of(this, wrapper);
}
/**
* 获取 CacheQuery 对象
*
* @return CacheQuery
*/
default CacheQuery<T> cache() {
return CacheQuery.of(this);
}
/**
* 获取 CacheQuery 对象
*
* @param id id
* @return CacheQuery
*/
default CacheQuery<T> cache(Serializable id) {
return CacheQuery.of(this, id);
}
/**
* 批量插入
*

View File

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