update 升级 全部依赖版本与适配性代码修改
This commit is contained in:
@@ -29,8 +29,8 @@
|
|||||||
|
|
||||||
<!-- 数据访问与持久化相关依赖版本 -->
|
<!-- 数据访问与持久化相关依赖版本 -->
|
||||||
<mybatis.version>3.5.19</mybatis.version>
|
<mybatis.version>3.5.19</mybatis.version>
|
||||||
<mybatis-plus.version>3.5.16</mybatis-plus.version>
|
<mybatis-plus.version>3.5.17</mybatis-plus.version>
|
||||||
<mybatis-plus-join.version>1.5.7</mybatis-plus-join.version>
|
<mybatis-plus-join.version>1.5.9</mybatis-plus-join.version>
|
||||||
<dynamic-ds.version>4.5.0</dynamic-ds.version>
|
<dynamic-ds.version>4.5.0</dynamic-ds.version>
|
||||||
<anyline.version>8.7.3-20260306</anyline.version>
|
<anyline.version>8.7.3-20260306</anyline.version>
|
||||||
<easy-es.version>3.0.2</easy-es.version>
|
<easy-es.version>3.0.2</easy-es.version>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
<!-- 安全认证与加密相关依赖版本 -->
|
<!-- 安全认证与加密相关依赖版本 -->
|
||||||
<satoken.version>1.45.0</satoken.version>
|
<satoken.version>1.45.0</satoken.version>
|
||||||
<justauth.version>1.16.7</justauth.version>
|
<justauth.version>1.16.7</justauth.version>
|
||||||
<bouncycastle.version>1.84</bouncycastle.version>
|
<bouncycastle.version>1.85</bouncycastle.version>
|
||||||
|
|
||||||
<!-- 缓存、锁与任务调度相关依赖版本 -->
|
<!-- 缓存、锁与任务调度相关依赖版本 -->
|
||||||
<redisson.version>4.6.1</redisson.version>
|
<redisson.version>4.6.1</redisson.version>
|
||||||
@@ -48,41 +48,41 @@
|
|||||||
<snailai.version>1.0.0</snailai.version>
|
<snailai.version>1.0.0</snailai.version>
|
||||||
|
|
||||||
<!-- 通用工具、编译增强与代码生成相关依赖版本 -->
|
<!-- 通用工具、编译增强与代码生成相关依赖版本 -->
|
||||||
<hutool.version>5.8.46</hutool.version>
|
<hutool.version>5.8.47</hutool.version>
|
||||||
<lombok.version>1.18.42</lombok.version>
|
<lombok.version>1.18.46</lombok.version>
|
||||||
<mapstruct-plus.version>1.5.1</mapstruct-plus.version>
|
<mapstruct-plus.version>1.5.1</mapstruct-plus.version>
|
||||||
<mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
|
<mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
|
||||||
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
||||||
<fesod.version>2.0.2-incubating</fesod.version>
|
<fesod.version>2.0.2-incubating</fesod.version>
|
||||||
<fory.version>1.2.0</fory.version>
|
<fory.version>1.3.0</fory.version>
|
||||||
|
|
||||||
<!-- 三方集成与业务扩展相关依赖版本 -->
|
<!-- 三方集成与业务扩展相关依赖版本 -->
|
||||||
<!-- 离线IP地址定位库 -->
|
<!-- 离线IP地址定位库 -->
|
||||||
<ip2region.version>3.3.6</ip2region.version>
|
<ip2region.version>3.3.7</ip2region.version>
|
||||||
<!-- 日志采集 -->
|
<!-- 日志采集 -->
|
||||||
<logstash.version>7.4</logstash.version>
|
<logstash.version>9.0</logstash.version>
|
||||||
<!-- 链路追踪 -->
|
<!-- 链路追踪 -->
|
||||||
<skywalking-toolkit.version>9.6.0</skywalking-toolkit.version>
|
<skywalking-toolkit.version>9.6.0</skywalking-toolkit.version>
|
||||||
<!-- 临时修复 fastjson 漏洞 -->
|
<!-- 临时修复 fastjson 漏洞 -->
|
||||||
<fastjson.version>1.2.83</fastjson.version>
|
<fastjson.version>1.2.83</fastjson.version>
|
||||||
<!-- OSS 配置 -->
|
<!-- OSS 配置 -->
|
||||||
<aws.sdk.version>2.42.9</aws.sdk.version>
|
<aws.sdk.version>2.48.1</aws.sdk.version>
|
||||||
<!-- SMS 配置 -->
|
<!-- SMS 配置 -->
|
||||||
<sms4j.version>3.3.4</sms4j.version>
|
<sms4j.version>3.3.5</sms4j.version>
|
||||||
<!-- 面向运行时的D-ORM依赖 -->
|
<!-- 面向运行时的D-ORM依赖 -->
|
||||||
<anyline.version>8.7.3-20260306</anyline.version>
|
<anyline.version>8.7.3-20260306</anyline.version>
|
||||||
<!-- 工作流配置 -->
|
<!-- 工作流配置 -->
|
||||||
<warm-flow.version>1.8.8</warm-flow.version>
|
<warm-flow.version>1.8.9</warm-flow.version>
|
||||||
<liteflow.version>2.16.0</liteflow.version>
|
<liteflow.version>2.16.0</liteflow.version>
|
||||||
<!-- mqtt客户端 -->
|
<!-- mqtt客户端 -->
|
||||||
<mica-mqtt.version>2.6.6</mica-mqtt.version>
|
<mica-mqtt.version>2.6.8</mica-mqtt.version>
|
||||||
<!-- mq配置 -->
|
<!-- mq配置 -->
|
||||||
<rocketmq.version>2.3.5</rocketmq.version>
|
<rocketmq.version>2.3.6</rocketmq.version>
|
||||||
|
|
||||||
<!-- Maven 构建插件版本 -->
|
<!-- Maven 构建插件版本 -->
|
||||||
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
|
<maven-compiler-plugin.version>3.15.0</maven-compiler-plugin.version>
|
||||||
<maven-surefire-plugin.version>3.5.5</maven-surefire-plugin.version>
|
<maven-surefire-plugin.version>3.5.5</maven-surefire-plugin.version>
|
||||||
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
|
<flatten-maven-plugin.version>1.7.3</flatten-maven-plugin.version>
|
||||||
<!-- 打包默认跳过测试 -->
|
<!-- 打包默认跳过测试 -->
|
||||||
<maven.test.skip>true</maven.test.skip>
|
<maven.test.skip>true</maven.test.skip>
|
||||||
</properties>
|
</properties>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<revision>6.0.0-BETA</revision>
|
<revision>6.0.0-BETA</revision>
|
||||||
<spring-cloud-alibaba.version>2025.1.0.0</spring-cloud-alibaba.version>
|
<spring-cloud-alibaba.version>2025.1.0.0</spring-cloud-alibaba.version>
|
||||||
<seata.version>2.6.0</seata.version>
|
<seata.version>2.6.0</seata.version>
|
||||||
<nacos.client.version>3.2.2</nacos.client.version>
|
<nacos.client.version>3.2.3</nacos.client.version>
|
||||||
<dubbo.version>3.3.6</dubbo.version>
|
<dubbo.version>3.3.6</dubbo.version>
|
||||||
<dubbo-extensions.version>3.3.1</dubbo-extensions.version>
|
<dubbo-extensions.version>3.3.1</dubbo-extensions.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|||||||
+220
@@ -0,0 +1,220 @@
|
|||||||
|
package com.github.yulichang.injector;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
|
||||||
|
import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
|
||||||
|
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
|
||||||
|
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
|
||||||
|
import com.baomidou.mybatisplus.core.injector.methods.SelectList;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.Mapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
|
||||||
|
import com.github.yulichang.base.JoinMapper;
|
||||||
|
import com.github.yulichang.method.*;
|
||||||
|
import com.github.yulichang.toolkit.MPJTableMapperHelper;
|
||||||
|
import com.github.yulichang.toolkit.ReflectionKit;
|
||||||
|
import com.github.yulichang.toolkit.TableHelper;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.apache.ibatis.builder.MapperBuilderAssistant;
|
||||||
|
import org.apache.ibatis.session.Configuration;
|
||||||
|
|
||||||
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.lang.reflect.TypeVariable;
|
||||||
|
import java.lang.reflect.WildcardType;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SQL 注入器
|
||||||
|
*
|
||||||
|
* @author yulichang
|
||||||
|
* @see DefaultSqlInjector
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public class MPJSqlInjector extends DefaultSqlInjector {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原始 SQL 注入器,用于兼容项目自定义注入逻辑。
|
||||||
|
*/
|
||||||
|
private AbstractSqlInjector sqlInjector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造 MPJ SQL 注入器。
|
||||||
|
*/
|
||||||
|
public MPJSqlInjector() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造带原始注入器的 MPJ SQL 注入器。
|
||||||
|
*
|
||||||
|
* @param sqlInjector 原始 SQL 注入器
|
||||||
|
*/
|
||||||
|
public MPJSqlInjector(ISqlInjector sqlInjector) {
|
||||||
|
if (Objects.nonNull(sqlInjector) && sqlInjector instanceof AbstractSqlInjector) {
|
||||||
|
this.sqlInjector = (AbstractSqlInjector) sqlInjector;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 Mapper 可用的注入方法列表。
|
||||||
|
*
|
||||||
|
* @param configuration MyBatis 配置
|
||||||
|
* @param mapperClass Mapper 类型
|
||||||
|
* @param tableInfo 表信息
|
||||||
|
* @return 注入方法列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<AbstractMethod> getMethodList(Configuration configuration, Class<?> mapperClass, TableInfo tableInfo) {
|
||||||
|
if (!isJoinMapper(mapperClass)) {
|
||||||
|
if (Objects.nonNull(sqlInjector)) {
|
||||||
|
return sqlInjector.getMethodList(configuration, mapperClass, tableInfo);
|
||||||
|
}
|
||||||
|
return super.getMethodList(configuration, mapperClass, tableInfo);
|
||||||
|
}
|
||||||
|
if (Objects.nonNull(sqlInjector)) {
|
||||||
|
return methodFilter(sqlInjector.getMethodList(configuration, mapperClass, tableInfo));
|
||||||
|
}
|
||||||
|
return methodFilter(super.getMethodList(configuration, mapperClass, tableInfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 过滤并追加 MPJ 需要的 SQL 注入方法。
|
||||||
|
*
|
||||||
|
* @param list 原始注入方法列表
|
||||||
|
* @return 过滤后的注入方法列表
|
||||||
|
*/
|
||||||
|
private List<AbstractMethod> methodFilter(List<AbstractMethod> list) {
|
||||||
|
String packageStr = SelectList.class.getPackage().getName();
|
||||||
|
List<String> methodList = Arrays.asList(
|
||||||
|
"Update",
|
||||||
|
"Delete",
|
||||||
|
"SelectOne",
|
||||||
|
"SelectCount",
|
||||||
|
"SelectMaps",
|
||||||
|
"SelectMapsPage",
|
||||||
|
"SelectObjs",
|
||||||
|
"SelectList",
|
||||||
|
"SelectPage");
|
||||||
|
list.removeIf(i -> methodList.contains(i.getClass().getSimpleName()) &&
|
||||||
|
Objects.equals(packageStr, i.getClass().getPackage().getName()));
|
||||||
|
addAll(list, getWrapperMethod());
|
||||||
|
addAll(list, getJoinMethod());
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 MPJ 联表操作注入方法。
|
||||||
|
*
|
||||||
|
* @return 联表操作注入方法列表
|
||||||
|
*/
|
||||||
|
private List<AbstractMethod> getJoinMethod() {
|
||||||
|
List<AbstractMethod> list = new ArrayList<>();
|
||||||
|
list.add(new DeleteJoin(SqlMethod.DELETE_JOIN.getMethod()));
|
||||||
|
list.add(new UpdateJoin(SqlMethod.UPDATE_JOIN.getMethod()));
|
||||||
|
list.add(new UpdateJoinAndNull(SqlMethod.UPDATE_JOIN_AND_NULL.getMethod()));
|
||||||
|
list.add(new SelectJoinCount(SqlMethod.SELECT_JOIN_COUNT.getMethod()));
|
||||||
|
list.add(new SelectJoinOne(SqlMethod.SELECT_JOIN_ONE.getMethod()));
|
||||||
|
list.add(new SelectJoinList(SqlMethod.SELECT_JOIN_LIST.getMethod()));
|
||||||
|
list.add(new SelectJoinPage(SqlMethod.SELECT_JOIN_PAGE.getMethod()));
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 MPJ 覆盖 MyBatis-Plus 默认 Wrapper 的注入方法。
|
||||||
|
*
|
||||||
|
* @return Wrapper 注入方法列表
|
||||||
|
*/
|
||||||
|
private List<AbstractMethod> getWrapperMethod() {
|
||||||
|
List<AbstractMethod> list = new ArrayList<>();
|
||||||
|
list.add(new com.github.yulichang.method.mp.Delete());
|
||||||
|
list.add(new com.github.yulichang.method.mp.SelectOne());
|
||||||
|
list.add(new com.github.yulichang.method.mp.SelectCount());
|
||||||
|
list.add(new com.github.yulichang.method.mp.SelectMaps());
|
||||||
|
list.add(new com.github.yulichang.method.mp.SelectMapsPage());
|
||||||
|
list.add(new com.github.yulichang.method.mp.SelectObjs());
|
||||||
|
list.add(new com.github.yulichang.method.mp.SelectList());
|
||||||
|
list.add(new com.github.yulichang.method.mp.SelectPage());
|
||||||
|
list.add(new com.github.yulichang.method.mp.Update());
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将新增注入方法追加到原始列表中,已存在同名方法时不重复追加。
|
||||||
|
*
|
||||||
|
* @param source 原始方法列表
|
||||||
|
* @param addList 待追加方法列表
|
||||||
|
*/
|
||||||
|
private void addAll(List<AbstractMethod> source, List<AbstractMethod> addList) {
|
||||||
|
for (AbstractMethod method : addList) {
|
||||||
|
if (source.stream().noneMatch(m -> m.getClass().getSimpleName().equals(method.getClass().getSimpleName()))) {
|
||||||
|
source.add(method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化 Mapper 注入信息,并为 JoinMapper 注册 MPJ 表映射缓存。
|
||||||
|
*
|
||||||
|
* @param builderAssistant Mapper 构建助手
|
||||||
|
* @param mapperClass Mapper 类型
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void inspectInject(MapperBuilderAssistant builderAssistant, Class<?> mapperClass) {
|
||||||
|
super.inspectInject(builderAssistant, mapperClass);
|
||||||
|
if (!isJoinMapper(mapperClass)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Class<?> modelClass = ReflectionKit.getSuperClassGenericType(mapperClass, Mapper.class, 0);
|
||||||
|
MPJTableMapperHelper.init(modelClass, mapperClass);
|
||||||
|
Supplier<Class<?>> supplier = () -> {
|
||||||
|
try {
|
||||||
|
return extractModelClassOld(mapperClass);
|
||||||
|
} catch (Throwable throwable) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TableHelper.init(modelClass, supplier.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 兼容旧版泛型解析逻辑,提取 Mapper 绑定的实体类型。
|
||||||
|
*
|
||||||
|
* @param mapperClass Mapper 类型
|
||||||
|
* @return Mapper 泛型中的实体类型,无法解析时返回 null
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("IfStatementWithIdenticalBranches")
|
||||||
|
protected Class<?> extractModelClassOld(Class<?> mapperClass) {
|
||||||
|
Type[] types = mapperClass.getGenericInterfaces();
|
||||||
|
ParameterizedType target = null;
|
||||||
|
for (Type type : types) {
|
||||||
|
if (type instanceof ParameterizedType) {
|
||||||
|
Type[] typeArray = ((ParameterizedType) type).getActualTypeArguments();
|
||||||
|
if (ArrayUtils.isNotEmpty(typeArray)) {
|
||||||
|
for (Type t : typeArray) {
|
||||||
|
if (t instanceof TypeVariable || t instanceof WildcardType) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
target = (ParameterizedType) type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return target == null ? null : (Class<?>) target.getActualTypeArguments()[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断 Mapper 是否继承 MPJ JoinMapper。
|
||||||
|
*
|
||||||
|
* @param mapperClass Mapper 类型
|
||||||
|
* @return true 是 JoinMapper false 不是 JoinMapper
|
||||||
|
*/
|
||||||
|
private boolean isJoinMapper(Class<?> mapperClass) {
|
||||||
|
return JoinMapper.class.isAssignableFrom(mapperClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-1
@@ -16,12 +16,13 @@ import org.dromara.common.core.utils.reflect.ReflectUtils;
|
|||||||
public class PlusPostInitTableInfoHandler implements PostInitTableInfoHandler {
|
public class PlusPostInitTableInfoHandler implements PostInitTableInfoHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postTableInfo(TableInfo tableInfo, Configuration configuration) {
|
public TableInfo postTableInfo(TableInfo tableInfo, Configuration configuration) {
|
||||||
String flag = SpringUtils.getProperty("mybatis-plus.enableLogicDelete", "true");
|
String flag = SpringUtils.getProperty("mybatis-plus.enableLogicDelete", "true");
|
||||||
// 只有关闭时 统一设置false 为true时mp自动判断不处理
|
// 只有关闭时 统一设置false 为true时mp自动判断不处理
|
||||||
if (!Convert.toBool(flag)) {
|
if (!Convert.toBool(flag)) {
|
||||||
ReflectUtils.setFieldValue(tableInfo, "withLogicDelete", false);
|
ReflectUtils.setFieldValue(tableInfo, "withLogicDelete", false);
|
||||||
}
|
}
|
||||||
|
return tableInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.scala-lang</groupId>
|
<groupId>org.scala-lang</groupId>
|
||||||
<artifactId>scala-library</artifactId>
|
<artifactId>scala-library</artifactId>
|
||||||
<version>2.13.9</version>
|
<version>2.13.18</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ services:
|
|||||||
network_mode: "host"
|
network_mode: "host"
|
||||||
|
|
||||||
nacos:
|
nacos:
|
||||||
image: nacos/nacos-server:v3.2.2
|
image: nacos/nacos-server:v3.2.3
|
||||||
container_name: nacos
|
container_name: nacos
|
||||||
ports:
|
ports:
|
||||||
- "8848:8848"
|
- "8848:8848"
|
||||||
|
|||||||
Reference in New Issue
Block a user