From dfa9baea93b3352bacb563b324e9a0333c5ec24b Mon Sep 17 00:00:00 2001
From: yulichang <570810310@qq.com>
Date: Mon, 27 Mar 2023 19:12:50 +0800
Subject: [PATCH] =?UTF-8?q?=E7=B1=BB=E5=90=8D=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../{IAdapter.java => ITableInfoAdapter.java} | 2 +-
...terV33x.java => TableInfoAdapterV33x.java} | 4 +-
.../mybatis-plus-join-adapter-v3431/pom.xml | 59 +++++++++++++++++++
.../adapter/v3431/AbstractMethodV3431.java | 17 ++++++
mybatis-plus-join-adapter/pom.xml | 1 +
.../MybatisPlusJoinAutoConfiguration.java | 27 ++++++---
.../conditional/MPJSqlInjectorCondition.java | 17 ++++++
.../conditional/OnSqlInjectorCondition.java | 46 +++++++++++++++
mybatis-plus-join-core/pom.xml | 5 ++
.../yulichang/adapter/AdapterHelper.java | 14 +++--
.../{Adapter.java => TableInfoAdapter.java} | 4 +-
.../base/mapper/MPJRelationMapper.java | 2 +-
.../yulichang/config/ConfigProperties.java | 6 +-
.../yulichang/injector/MPJSqlInjector.java | 58 +++++++++++++-----
.../yulichang/method/MPJBaseMethod.java | 18 +++---
.../yulichang/query/MPJQueryWrapper.java | 2 +-
.../yulichang/toolkit/LogicInfoUtils.java | 4 +-
.../toolkit/support/ColumnCache.java | 2 +-
.../yulichang/wrapper/MPJLambdaWrapper.java | 2 +-
.../wrapper/segments/SelectCache.java | 2 +-
.../test/config/MybatisPlusConfig.java | 39 ++++++++++++
.../test/join/mapper/MyBaseMapper.java | 6 +-
.../test/join/LambdaWrapperTest.java | 5 ++
23 files changed, 287 insertions(+), 55 deletions(-)
rename mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/{IAdapter.java => ITableInfoAdapter.java} (93%)
rename mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/{AdapterV33x.java => TableInfoAdapterV33x.java} (90%)
create mode 100644 mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/pom.xml
create mode 100644 mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/AbstractMethodV3431.java
create mode 100644 mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/MPJSqlInjectorCondition.java
create mode 100644 mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/OnSqlInjectorCondition.java
rename mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/{Adapter.java => TableInfoAdapter.java} (88%)
diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/IAdapter.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/ITableInfoAdapter.java
similarity index 93%
rename from mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/IAdapter.java
rename to mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/ITableInfoAdapter.java
index 7fe6fc5..8fa6d08 100644
--- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/IAdapter.java
+++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-base/src/main/java/com/github/yulichang/adapter/base/ITableInfoAdapter.java
@@ -8,7 +8,7 @@ import org.apache.ibatis.session.Configuration;
* @author yulichang
* @since 1.4.3
*/
-public interface IAdapter {
+public interface ITableInfoAdapter {
boolean mpjHasLogic(TableInfo tableInfo);
diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/AdapterV33x.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/TableInfoAdapterV33x.java
similarity index 90%
rename from mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/AdapterV33x.java
rename to mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/TableInfoAdapterV33x.java
index 550b1b5..a2edcde 100644
--- a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/AdapterV33x.java
+++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v33x/src/main/java/com/github/yulichang/adapter/v33x/TableInfoAdapterV33x.java
@@ -3,7 +3,7 @@ package com.github.yulichang.adapter.v33x;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.github.yulichang.adapter.base.IAdapter;
+import com.github.yulichang.adapter.base.ITableInfoAdapter;
import org.apache.ibatis.session.Configuration;
import java.util.Objects;
@@ -12,7 +12,7 @@ import java.util.Objects;
* @author yulichang
* @since 1.4.3
*/
-public class AdapterV33x implements IAdapter {
+public class TableInfoAdapterV33x implements ITableInfoAdapter {
@Override
public boolean mpjHasLogic(TableInfo tableInfo) {
diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/pom.xml b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/pom.xml
new file mode 100644
index 0000000..07a6b97
--- /dev/null
+++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/pom.xml
@@ -0,0 +1,59 @@
+
+
+
+ 4.0.0
+
+ com.github.yulichang
+ mybatis-plus-join-adapter
+ 1.4.4
+
+ mybatis-plus-join-adapter-v3431
+ 1.4.4
+ mybatis-plus-join-adapter-v3431
+
+ An enhanced toolkit of Mybatis-Plus to simplify development.
+ https://github.com/yulichang/mybatis-plus-join
+
+
+ The Apache License, Version 2.0
+ https://www.apache.org/licenses/LICENSE-2.0.txt
+
+
+
+
+ mybatis-plus-join
+ yulichang
+ yu_lichang@qq.com
+
+
+
+ scm:git:https://github.com/yulichang/mybatis-plus-join.git
+ scm:git:https://github.com/yulichang/mybatis-plus-join.git
+ https://github.com/yulichang/mybatis-plus-join
+
+
+
+ 1.8
+ 1.8
+ 1.8
+ 1.8
+ github
+ UTF-8
+
+
+
+
+ com.github.yulichang
+ mybatis-plus-join-adapter-base
+ 1.4.4
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.4.3.1
+ provided
+
+
+
+
diff --git a/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/AbstractMethodV3431.java b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/AbstractMethodV3431.java
new file mode 100644
index 0000000..e866f96
--- /dev/null
+++ b/mybatis-plus-join-adapter/mybatis-plus-join-adapter-v3431/src/main/java/com/github/yulichang/adapter/v3431/AbstractMethodV3431.java
@@ -0,0 +1,17 @@
+package com.github.yulichang.adapter.v3431;
+
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
+
+import java.util.List;
+
+/**
+ * @author yulichang
+ * @since 1.4.5
+ */
+public class AbstractMethodV3431 {
+
+ public static List getMethod(AbstractSqlInjector sqlInjector, Class> clazz) {
+ return sqlInjector.getMethodList(clazz);
+ }
+}
diff --git a/mybatis-plus-join-adapter/pom.xml b/mybatis-plus-join-adapter/pom.xml
index 3a32a9c..4e57b0f 100644
--- a/mybatis-plus-join-adapter/pom.xml
+++ b/mybatis-plus-join-adapter/pom.xml
@@ -15,6 +15,7 @@
mybatis-plus-join-adapter-base
mybatis-plus-join-adapter-v33x
+ mybatis-plus-join-adapter-v3431
mybatis-plus-join-adapter-v352
diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java
index c1fad5e..76d9c2d 100644
--- a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java
+++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinAutoConfiguration.java
@@ -2,8 +2,8 @@ package com.github.yulichang.autoconfigure;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration;
import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
-import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
+import com.github.yulichang.autoconfigure.conditional.MPJSqlInjectorCondition;
import com.github.yulichang.config.ConfigProperties;
import com.github.yulichang.config.MPJInterceptorConfig;
import com.github.yulichang.config.enums.LogicDelTypeEnum;
@@ -28,6 +28,7 @@ import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
@@ -86,9 +87,22 @@ public class MybatisPlusJoinAutoConfiguration {
* mybatis plus join 自定义方法
*/
@Bean
+ @Primary
+ @MPJSqlInjectorCondition
@Order(Ordered.HIGHEST_PRECEDENCE)
- @ConditionalOnMissingBean({DefaultSqlInjector.class, AbstractSqlInjector.class, ISqlInjector.class})
- public MPJSqlInjector mpjSqlInjector() {
+ @ConditionalOnBean(ISqlInjector.class)
+ public MPJSqlInjector mpjSqlInjector(AbstractSqlInjector sqlInjector) {
+ logger.info("MPJSqlInjector init");
+ return new MPJSqlInjector(sqlInjector);
+ }
+
+ /**
+ * mybatis plus join 自定义方法
+ */
+ @Bean
+ @Order(Ordered.HIGHEST_PRECEDENCE)
+ @ConditionalOnMissingBean(ISqlInjector.class)
+ public MPJSqlInjector mpjSqlInjectorOnMiss() {
logger.info("MPJSqlInjector init");
return new MPJSqlInjector();
}
@@ -98,14 +112,14 @@ public class MybatisPlusJoinAutoConfiguration {
*/
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
- public SpringContentUtils springContentUtils(SpringContext springContext) {
+ public SpringContentUtils mpjSpringContent(MPJSpringContext springContext) {
return new SpringContentUtils(springContext);
}
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnBean(SqlSessionFactory.class)
- public static class MappingConfig implements ApplicationListener {
+ public static class MPJMappingConfig implements ApplicationListener {
@Override
@SuppressWarnings("NullableProblems")
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
@@ -115,7 +129,7 @@ public class MybatisPlusJoinAutoConfiguration {
@Configuration
@ConditionalOnBean(SqlSessionFactory.class)
- public static class SpringContext implements SpringContentUtils.SpringContext, ApplicationContextAware {
+ public static class MPJSpringContext implements SpringContentUtils.SpringContext, ApplicationContextAware {
private ApplicationContext applicationContext;
@@ -129,5 +143,4 @@ public class MybatisPlusJoinAutoConfiguration {
this.applicationContext = applicationContext;
}
}
-
}
diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/MPJSqlInjectorCondition.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/MPJSqlInjectorCondition.java
new file mode 100644
index 0000000..ac24fec
--- /dev/null
+++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/MPJSqlInjectorCondition.java
@@ -0,0 +1,17 @@
+package com.github.yulichang.autoconfigure.conditional;
+
+
+import org.springframework.context.annotation.Conditional;
+
+import java.lang.annotation.*;
+
+/**
+ * @author yulichang
+ * @since 1.4.5
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD})
+@Conditional(OnSqlInjectorCondition.class)
+public @interface MPJSqlInjectorCondition {
+}
diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/OnSqlInjectorCondition.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/OnSqlInjectorCondition.java
new file mode 100644
index 0000000..d9b436c
--- /dev/null
+++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/conditional/OnSqlInjectorCondition.java
@@ -0,0 +1,46 @@
+package com.github.yulichang.autoconfigure.conditional;
+
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
+import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.Condition;
+import org.springframework.context.annotation.ConditionContext;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.annotation.MergedAnnotation;
+import org.springframework.core.annotation.MergedAnnotations;
+import org.springframework.core.type.AnnotatedTypeMetadata;
+import org.springframework.core.type.MethodMetadata;
+
+import java.lang.annotation.Annotation;
+import java.util.Objects;
+
+/**
+ * @author yulichang
+ * @since 1.4.5
+ */
+public class OnSqlInjectorCondition implements Condition {
+
+ @Override
+ @SuppressWarnings("NullableProblems")
+ public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
+ if (Objects.nonNull(conditionContext.getBeanFactory())) {
+ String[] names = conditionContext.getBeanFactory().getBeanNamesForType(ISqlInjector.class);
+ for (String name : names) {
+ BeanDefinition definition = conditionContext.getBeanFactory().getBeanDefinition(name);
+ if (definition instanceof AnnotatedBeanDefinition) {
+ AnnotatedBeanDefinition annotatedBeanDefinition = (AnnotatedBeanDefinition) definition;
+ MethodMetadata metadata = annotatedBeanDefinition.getFactoryMethodMetadata();
+ if (Objects.nonNull(metadata)) {
+ MergedAnnotations annotations = metadata.getAnnotations();
+ for (MergedAnnotation it : annotations) {
+ if (Objects.equals(it.getType(), Primary.class)) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/mybatis-plus-join-core/pom.xml b/mybatis-plus-join-core/pom.xml
index c0a6966..4947dff 100644
--- a/mybatis-plus-join-core/pom.xml
+++ b/mybatis-plus-join-core/pom.xml
@@ -54,6 +54,11 @@
mybatis-plus-join-adapter-v33x
1.4.4
+
+ com.github.yulichang
+ mybatis-plus-join-adapter-v3431
+ 1.4.4
+
com.github.yulichang
mybatis-plus-join-adapter-v352
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java
index d0c032d..5326a56 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/AdapterHelper.java
@@ -1,16 +1,20 @@
package com.github.yulichang.adapter;
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
-import com.github.yulichang.adapter.base.IAdapter;
-import com.github.yulichang.adapter.v33x.AdapterV33x;
+import com.github.yulichang.adapter.base.ITableInfoAdapter;
+import com.github.yulichang.adapter.v33x.TableInfoAdapterV33x;
+/**
+ * @author yulichang
+ * @since 1.4.3
+ */
public class AdapterHelper {
- public static IAdapter getAdapter() {
+ public static ITableInfoAdapter getTableInfoAdapter() {
String version = MybatisPlusVersion.getVersion();
if (version.startsWith("3.3.")) {
- return new AdapterV33x();
+ return new TableInfoAdapterV33x();
}
- return new Adapter();
+ return new TableInfoAdapter();
}
}
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/Adapter.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/TableInfoAdapter.java
similarity index 88%
rename from mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/Adapter.java
rename to mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/TableInfoAdapter.java
index c40e991..41b66c2 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/Adapter.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/adapter/TableInfoAdapter.java
@@ -2,14 +2,14 @@ package com.github.yulichang.adapter;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.github.yulichang.adapter.base.IAdapter;
+import com.github.yulichang.adapter.base.ITableInfoAdapter;
import org.apache.ibatis.session.Configuration;
/**
* @author yulichang
* @since 1.4.3
*/
-public class Adapter implements IAdapter {
+public class TableInfoAdapter implements ITableInfoAdapter {
@Override
public boolean mpjHasLogic(TableInfo tableInfo) {
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java
index 8d9b5ce..03b8222 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/base/mapper/MPJRelationMapper.java
@@ -19,7 +19,7 @@ import java.util.function.Function;
* @author yulichang
* @since 1.4.3
*/
-public interface MPJRelationMapper extends BaseMapper {
+public interface MPJRelationMapper {
/**
* 通过注解实现单表多次查询
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java
index 2b3cb72..403644f 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/config/ConfigProperties.java
@@ -1,7 +1,7 @@
package com.github.yulichang.config;
import com.github.yulichang.adapter.AdapterHelper;
-import com.github.yulichang.adapter.base.IAdapter;
+import com.github.yulichang.adapter.base.ITableInfoAdapter;
import com.github.yulichang.config.enums.LogicDelTypeEnum;
/**
@@ -31,7 +31,7 @@ public class ConfigProperties {
*/
public static LogicDelTypeEnum logicDelType = LogicDelTypeEnum.WHERE;
/**
- * 适配器
+ * TableInfo适配器
*/
- public static IAdapter adapter = AdapterHelper.getAdapter();
+ public static ITableInfoAdapter tableInfoAdapter = AdapterHelper.getTableInfoAdapter();
}
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java
index a6a28ff..a2a009f 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/injector/MPJSqlInjector.java
@@ -2,17 +2,20 @@ package com.github.yulichang.injector;
import com.baomidou.mybatisplus.core.MybatisPlusVersion;
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.methods.*;
import com.baomidou.mybatisplus.core.mapper.Mapper;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
+import com.github.yulichang.adapter.v3431.AbstractMethodV3431;
import com.github.yulichang.mapper.MPJTableMapperHelper;
import com.github.yulichang.method.*;
import com.github.yulichang.toolkit.TableHelper;
import com.github.yulichang.toolkit.VersionUtils;
import com.github.yulichang.toolkit.reflect.GenericTypeUtils;
+import lombok.Getter;
import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.mybatis.logging.Logger;
import org.mybatis.logging.LoggerFactory;
@@ -24,6 +27,7 @@ import java.lang.reflect.WildcardType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
@@ -38,6 +42,16 @@ public class MPJSqlInjector extends DefaultSqlInjector {
private static final Logger logger = LoggerFactory.getLogger(MPJSqlInjector.class);
+ @Getter
+ private AbstractSqlInjector sqlInjector;
+
+ public MPJSqlInjector() {
+ }
+
+ public MPJSqlInjector(AbstractSqlInjector sqlInjector) {
+ this.sqlInjector = sqlInjector;
+ }
+
/**
* 升级到 mybatis plus 3.4.3.2 后对之前的版本兼容
*/
@@ -48,19 +62,24 @@ public class MPJSqlInjector extends DefaultSqlInjector {
logger.error(() -> "DefaultSqlInjector 的 getMethodList(Class> mapperClass) 方法已在 3.4.3.2+ 改为" +
"getMethodList(Class> mapperClass, TableInfo tableInfo)\n");
}
- List list = Stream.of(
- new Insert(),
- new DeleteByMap(),
- new DeleteById(),
- new DeleteBatchByIds(),
- new UpdateById(),
- new SelectById(),
- new SelectBatchByIds(),
- new SelectByMap()
- ).collect(toList());
- list.addAll(getJoinMethod());
- list.addAll(getSelectMethod());
- return list;
+ if (Objects.nonNull(sqlInjector)) {
+ List methodList = AbstractMethodV3431.getMethod(sqlInjector, mapperClass);
+ return methodFilter(methodList);
+ } else {
+ List list = Stream.of(
+ new Insert(),
+ new DeleteByMap(),
+ new DeleteById(),
+ new DeleteBatchByIds(),
+ new UpdateById(),
+ new SelectById(),
+ new SelectBatchByIds(),
+ new SelectByMap()
+ ).collect(toList());
+ list.addAll(getWrapperMethod());
+ list.addAll(getJoinMethod());
+ return list;
+ }
}
/**
@@ -68,6 +87,13 @@ public class MPJSqlInjector extends DefaultSqlInjector {
*/
@Override
public List getMethodList(Class> mapperClass, TableInfo tableInfo) {
+ if (Objects.nonNull(sqlInjector)) {
+ return methodFilter(sqlInjector.getMethodList(mapperClass, tableInfo));
+ }
+ return methodFilter(super.getMethodList(mapperClass, tableInfo));
+ }
+
+ private List methodFilter(List list) {
List methodList = Arrays.asList(
"Update",
"Delete",
@@ -78,9 +104,8 @@ public class MPJSqlInjector extends DefaultSqlInjector {
"SelectObjs",
"SelectList",
"SelectPage");
- List list = super.getMethodList(mapperClass, tableInfo);
list.removeIf(i -> methodList.contains(i.getClass().getSimpleName()));
- list.addAll(getSelectMethod());
+ list.addAll(getWrapperMethod());
list.addAll(getJoinMethod());
return list;
}
@@ -107,7 +132,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
return list;
}
- private List getSelectMethod() {
+ private List getWrapperMethod() {
List list = new ArrayList<>();
list.add(new com.github.yulichang.method.mp.Delete());
list.add(new com.github.yulichang.method.mp.SelectOne());
@@ -134,6 +159,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
return null == typeArguments ? null : typeArguments[index];
}
+ @SuppressWarnings("IfStatementWithIdenticalBranches")
protected Class> extractModelClassOld(Class> mapperClass) {
Type[] types = mapperClass.getGenericInterfaces();
ParameterizedType target = null;
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java
index 13d68cf..aff14ec 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/method/MPJBaseMethod.java
@@ -24,7 +24,7 @@ import static java.util.stream.Collectors.joining;
public interface MPJBaseMethod extends Constants {
default String mpjSqlWhereEntityWrapper(boolean newLine, TableInfo table) {
- if (ConfigProperties.adapter.mpjHasLogic(table)) {
+ if (ConfigProperties.tableInfoAdapter.mpjHasLogic(table)) {
String sqlScript = getAllSqlWhere(table, true, true, WRAPPER_ENTITY_DOT);
sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", WRAPPER_ENTITY), true);
sqlScript += NEWLINE;
@@ -69,7 +69,7 @@ public interface MPJBaseMethod extends Constants {
String filedSqlScript = tableInfo.getFieldList().stream()
.filter(i -> {
if (ignoreLogicDelFiled) {
- return !(ConfigProperties.adapter.mpjHasLogic(tableInfo) && i.isLogicDelete());
+ return !(ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo) && i.isLogicDelete());
}
return true;
})
@@ -98,7 +98,7 @@ public interface MPJBaseMethod extends Constants {
if (fieldStrategy == FieldStrategy.NEVER) {
return null;
}
- if (ConfigProperties.adapter.mpjIsPrimitive(tableFieldInfo) || fieldStrategy == FieldStrategy.IGNORED) {
+ if (ConfigProperties.tableInfoAdapter.mpjIsPrimitive(tableFieldInfo) || fieldStrategy == FieldStrategy.IGNORED) {
return sqlScript;
}
if (fieldStrategy == FieldStrategy.NOT_EMPTY && tableFieldInfo.isCharSequence()) {
@@ -114,7 +114,7 @@ public interface MPJBaseMethod extends Constants {
default String getLogicDeleteSql(TableInfo tableInfo, boolean startWithAnd, boolean isWhere) {
- if (ConfigProperties.adapter.mpjHasLogic(tableInfo)) {
+ if (ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo)) {
String logicDeleteSql = formatLogicDeleteSql(tableInfo, isWhere);
if (startWithAnd) {
logicDeleteSql = " AND " + logicDeleteSql;
@@ -126,15 +126,15 @@ public interface MPJBaseMethod extends Constants {
default String formatLogicDeleteSql(TableInfo tableInfo, boolean isWhere) {
- final String value = isWhere ? ConfigProperties.adapter.mpjGetLogicField(tableInfo).getLogicNotDeleteValue() :
- ConfigProperties.adapter.mpjGetLogicField(tableInfo).getLogicDeleteValue();
+ final String value = isWhere ? ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getLogicNotDeleteValue() :
+ ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getLogicDeleteValue();
if (isWhere) {
if (NULL.equalsIgnoreCase(value)) {
- return "${ew.alias}." + ConfigProperties.adapter.mpjGetLogicField(tableInfo).getColumn() +
+ return "${ew.alias}." + ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getColumn() +
" IS NULL";
} else {
- return "${ew.alias}." + ConfigProperties.adapter.mpjGetLogicField(tableInfo).getColumn() +
- EQUALS + String.format(ConfigProperties.adapter.mpjGetLogicField(tableInfo).isCharSequence() ?
+ return "${ew.alias}." + ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getColumn() +
+ EQUALS + String.format(ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).isCharSequence() ?
"'%s'" : "%s", value);
}
}
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java
index a3bc982..a4007f2 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/query/MPJQueryWrapper.java
@@ -179,7 +179,7 @@ public class MPJQueryWrapper extends AbstractWrapper selectAll(Class> clazz, String as) {
TableInfo info = TableHelper.get(clazz);
Assert.notNull(info, "table not find by class <%s>", clazz);
- if (ConfigProperties.adapter.mpjHasPK(info)) {
+ if (ConfigProperties.tableInfoAdapter.mpjHasPK(info)) {
selectColumns.add(as + StringPool.DOT + info.getKeySqlSelect());
}
selectColumns.addAll(info.getFieldList().stream().map(i ->
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java
index aa20e73..87556f3 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/LogicInfoUtils.java
@@ -46,8 +46,8 @@ public class LogicInfoUtils implements Constants {
String logicStr;
TableInfo tableInfo = TableHelper.get(clazz);
Assert.notNull(tableInfo, "table not find by class <%s>", clazz.getSimpleName());
- TableFieldInfo logicField = ConfigProperties.adapter.mpjGetLogicField(tableInfo);
- if (ConfigProperties.adapter.mpjHasLogic(tableInfo) && Objects.nonNull(logicField)) {
+ TableFieldInfo logicField = ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo);
+ if (ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo) && Objects.nonNull(logicField)) {
final String value = logicField.getLogicNotDeleteValue();
if (NULL.equalsIgnoreCase(value)) {
logicStr = (and ? " AND " : EMPTY) + prefix + DOT + logicField.getColumn() + " IS NULL";
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java
index 992d6b6..f7a5056 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/toolkit/support/ColumnCache.java
@@ -30,7 +30,7 @@ public class ColumnCache {
TableInfo tableInfo = TableHelper.get(clazz);
Assert.notNull(tableInfo, "table not find by class <%s>", c.getSimpleName());
List list = new ArrayList<>();
- if (ConfigProperties.adapter.mpjHasPK(tableInfo)) {
+ if (ConfigProperties.tableInfoAdapter.mpjHasPK(tableInfo)) {
list.add(new SelectCache(clazz, true, tableInfo.getKeyColumn(), tableInfo.getKeyType(), tableInfo.getKeyProperty(), null));
}
list.addAll(tableInfo.getFieldList().stream().map(f -> new SelectCache(clazz, false, f.getColumn(), f.getPropertyType(), f.getProperty(), f)).collect(Collectors.toList()));
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java
index 1cef1c2..2b22e8e 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/MPJLambdaWrapper.java
@@ -273,7 +273,7 @@ public class MPJLambdaWrapper extends MPJAbstractLambdaWrapper wrapper : onWrappers) {
if (wrapper.subLogicSql && this.logicDelType == LogicDelTypeEnum.ON) {
TableInfo tableInfo = TableHelper.get(wrapper.getJoinClass());
- if (ConfigProperties.adapter.mpjHasLogic(tableInfo)) {
+ if (ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo)) {
wrapper.appendSqlSegments(APPLY, () -> LogicInfoUtils.getLogicInfoNoAnd(
wrapper.getIndex(), wrapper.getJoinClass(), wrapper.isHasAlias(), wrapper.getAlias()
));
diff --git a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java
index cd086c1..8e10837 100644
--- a/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java
+++ b/mybatis-plus-join-core/src/main/java/com/github/yulichang/wrapper/segments/SelectCache.java
@@ -57,7 +57,7 @@ public class SelectCache {
if (this.hasTypeHandle) {
TableInfo info = TableHelper.get(clazz);
Assert.notNull(info, "table not find by class <%s>", clazz.getSimpleName());
- this.typeHandler = getTypeHandler(ConfigProperties.adapter.mpjGetConfiguration(info), tableFieldInfo);
+ this.typeHandler = getTypeHandler(ConfigProperties.tableInfoAdapter.mpjGetConfiguration(info), tableFieldInfo);
} else {
this.typeHandler = null;
}
diff --git a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java
index c300ca4..3327acf 100644
--- a/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java
+++ b/mybatis-plus-join-test/test-base/src/main/java/com/github/yulichang/test/config/MybatisPlusConfig.java
@@ -1,11 +1,16 @@
package com.github.yulichang.test.config;
import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.github.yulichang.injector.MPJSqlInjector;
import com.github.yulichang.test.util.ThreadLocalUtils;
import lombok.SneakyThrows;
import org.apache.ibatis.builder.SqlSourceBuilder;
@@ -17,6 +22,9 @@ import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
import java.sql.Connection;
import java.util.List;
@@ -41,6 +49,37 @@ public class MybatisPlusConfig {
return interceptor;
}
+ @Bean
+ @Primary
+ @Order(Ordered.HIGHEST_PRECEDENCE)
+ public ISqlInjector sqlInjector() {
+ return new MPJSqlInjector() {
+ @Override
+ public List getMethodList(Class> mapperClass, TableInfo tableInfo) {
+ List list = super.getMethodList(mapperClass, tableInfo);
+ //添加你的方法
+ list.add(new InsertBatchSomeColumn());
+ return list;
+ }
+ };
+ }
+
+// @Bean
+// @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
+// public SqlSessionFactory sqlSessionFactory(DataSource dataSource,
+// MybatisPlusInterceptor interceptor) throws Exception {
+// MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
+// factory.setDataSource(dataSource);
+// GlobalConfig.DbConfig config = new GlobalConfig.DbConfig();
+// config.setLogicDeleteField("del");
+// config.setLogicDeleteValue("true");
+// config.setLogicNotDeleteValue("false");
+// factory.setGlobalConfig(new GlobalConfig().setSqlInjector(new MPJSqlInjector())
+// .setDbConfig(config));
+// factory.setPlugins(interceptor);
+// return factory.getObject();
+// }
+
/**
* 校验sql
*/
diff --git a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java
index 96475e5..e992c2f 100644
--- a/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java
+++ b/mybatis-plus-join-test/test-join/src/main/java/com/github/yulichang/test/join/mapper/MyBaseMapper.java
@@ -1,14 +1,14 @@
package com.github.yulichang.test.join.mapper;
import com.github.yulichang.base.MPJBaseMapper;
+import com.github.yulichang.base.mapper.MPJDeepMapper;
import org.apache.ibatis.annotations.Mapper;
-import java.io.Serializable;
import java.util.List;
@Mapper
-@SuppressWarnings("unused")
-public interface MyBaseMapper extends MPJBaseMapper {
+public interface MyBaseMapper extends MPJBaseMapper, MPJDeepMapper {
+ @SuppressWarnings("UnusedReturnValue")
int insertBatchSomeColumn(List entityList);
}
diff --git a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java
index 6b53937..54b56c2 100644
--- a/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java
+++ b/mybatis-plus-join-test/test-join/src/test/java/com/github/yulichang/test/join/LambdaWrapperTest.java
@@ -23,6 +23,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.BadSqlGrammarException;
import java.sql.Timestamp;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -654,6 +655,10 @@ class LambdaWrapperTest {
.select(UserDO::getName)
.eq(UserDO::getName, "ref");
userMapper.selectList(wrapper);
+ try {
+ userMapper.insertBatchSomeColumn(new ArrayList<>());
+ } catch (BadSqlGrammarException ignored) {
+ }
}