类名修改

This commit is contained in:
yulichang 2023-03-27 19:12:50 +08:00
parent 3c3fb3272c
commit dfa9baea93
23 changed files with 287 additions and 55 deletions

View File

@ -8,7 +8,7 @@ import org.apache.ibatis.session.Configuration;
* @author yulichang * @author yulichang
* @since 1.4.3 * @since 1.4.3
*/ */
public interface IAdapter { public interface ITableInfoAdapter {
boolean mpjHasLogic(TableInfo tableInfo); boolean mpjHasLogic(TableInfo tableInfo);

View File

@ -3,7 +3,7 @@ package com.github.yulichang.adapter.v33x;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; 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 org.apache.ibatis.session.Configuration;
import java.util.Objects; import java.util.Objects;
@ -12,7 +12,7 @@ import java.util.Objects;
* @author yulichang * @author yulichang
* @since 1.4.3 * @since 1.4.3
*/ */
public class AdapterV33x implements IAdapter { public class TableInfoAdapterV33x implements ITableInfoAdapter {
@Override @Override
public boolean mpjHasLogic(TableInfo tableInfo) { public boolean mpjHasLogic(TableInfo tableInfo) {

View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--suppress VulnerableLibrariesLocal -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-adapter</artifactId>
<version>1.4.4</version>
</parent>
<artifactId>mybatis-plus-join-adapter-v3431</artifactId>
<version>1.4.4</version>
<name>mybatis-plus-join-adapter-v3431</name>
<description>An enhanced toolkit of Mybatis-Plus to simplify development.</description>
<url>https://github.com/yulichang/mybatis-plus-join</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<id>mybatis-plus-join</id>
<name>yulichang</name>
<email>yu_lichang@qq.com</email>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/yulichang/mybatis-plus-join.git</connection>
<developerConnection>scm:git:https://github.com/yulichang/mybatis-plus-join.git</developerConnection>
<url>https://github.com/yulichang/mybatis-plus-join</url>
</scm>
<properties>
<jdkVersion>1.8</jdkVersion>
<jdkVersion.test>1.8</jdkVersion.test>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<github.global.server>github</github.global.server>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-adapter-base</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@ -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<AbstractMethod> getMethod(AbstractSqlInjector sqlInjector, Class<?> clazz) {
return sqlInjector.getMethodList(clazz);
}
}

View File

@ -15,6 +15,7 @@
<modules> <modules>
<module>mybatis-plus-join-adapter-base</module> <module>mybatis-plus-join-adapter-base</module>
<module>mybatis-plus-join-adapter-v33x</module> <module>mybatis-plus-join-adapter-v33x</module>
<module>mybatis-plus-join-adapter-v3431</module>
<module>mybatis-plus-join-adapter-v352</module> <module>mybatis-plus-join-adapter-v352</module>
</modules> </modules>

View File

@ -2,8 +2,8 @@ package com.github.yulichang.autoconfigure;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration;
import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector; 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.ISqlInjector;
import com.github.yulichang.autoconfigure.conditional.MPJSqlInjectorCondition;
import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.config.ConfigProperties;
import com.github.yulichang.config.MPJInterceptorConfig; import com.github.yulichang.config.MPJInterceptorConfig;
import com.github.yulichang.config.enums.LogicDelTypeEnum; 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.ApplicationListener;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
@ -86,9 +87,22 @@ public class MybatisPlusJoinAutoConfiguration {
* mybatis plus join 自定义方法 * mybatis plus join 自定义方法
*/ */
@Bean @Bean
@Primary
@MPJSqlInjectorCondition
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnMissingBean({DefaultSqlInjector.class, AbstractSqlInjector.class, ISqlInjector.class}) @ConditionalOnBean(ISqlInjector.class)
public MPJSqlInjector mpjSqlInjector() { 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"); logger.info("MPJSqlInjector init");
return new MPJSqlInjector(); return new MPJSqlInjector();
} }
@ -98,14 +112,14 @@ public class MybatisPlusJoinAutoConfiguration {
*/ */
@Bean @Bean
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
public SpringContentUtils springContentUtils(SpringContext springContext) { public SpringContentUtils mpjSpringContent(MPJSpringContext springContext) {
return new SpringContentUtils(springContext); return new SpringContentUtils(springContext);
} }
@Configuration @Configuration
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnBean(SqlSessionFactory.class) @ConditionalOnBean(SqlSessionFactory.class)
public static class MappingConfig implements ApplicationListener<ApplicationReadyEvent> { public static class MPJMappingConfig implements ApplicationListener<ApplicationReadyEvent> {
@Override @Override
@SuppressWarnings("NullableProblems") @SuppressWarnings("NullableProblems")
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
@ -115,7 +129,7 @@ public class MybatisPlusJoinAutoConfiguration {
@Configuration @Configuration
@ConditionalOnBean(SqlSessionFactory.class) @ConditionalOnBean(SqlSessionFactory.class)
public static class SpringContext implements SpringContentUtils.SpringContext, ApplicationContextAware { public static class MPJSpringContext implements SpringContentUtils.SpringContext, ApplicationContextAware {
private ApplicationContext applicationContext; private ApplicationContext applicationContext;
@ -129,5 +143,4 @@ public class MybatisPlusJoinAutoConfiguration {
this.applicationContext = applicationContext; this.applicationContext = applicationContext;
} }
} }
} }

View File

@ -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 {
}

View File

@ -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<Annotation> it : annotations) {
if (Objects.equals(it.getType(), Primary.class)) {
return false;
}
}
}
}
}
}
return true;
}
}

View File

@ -54,6 +54,11 @@
<artifactId>mybatis-plus-join-adapter-v33x</artifactId> <artifactId>mybatis-plus-join-adapter-v33x</artifactId>
<version>1.4.4</version> <version>1.4.4</version>
</dependency> </dependency>
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-adapter-v3431</artifactId>
<version>1.4.4</version>
</dependency>
<dependency> <dependency>
<groupId>com.github.yulichang</groupId> <groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-adapter-v352</artifactId> <artifactId>mybatis-plus-join-adapter-v352</artifactId>

View File

@ -1,16 +1,20 @@
package com.github.yulichang.adapter; package com.github.yulichang.adapter;
import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.MybatisPlusVersion;
import com.github.yulichang.adapter.base.IAdapter; import com.github.yulichang.adapter.base.ITableInfoAdapter;
import com.github.yulichang.adapter.v33x.AdapterV33x; import com.github.yulichang.adapter.v33x.TableInfoAdapterV33x;
/**
* @author yulichang
* @since 1.4.3
*/
public class AdapterHelper { public class AdapterHelper {
public static IAdapter getAdapter() { public static ITableInfoAdapter getTableInfoAdapter() {
String version = MybatisPlusVersion.getVersion(); String version = MybatisPlusVersion.getVersion();
if (version.startsWith("3.3.")) { if (version.startsWith("3.3.")) {
return new AdapterV33x(); return new TableInfoAdapterV33x();
} }
return new Adapter(); return new TableInfoAdapter();
} }
} }

View File

@ -2,14 +2,14 @@ package com.github.yulichang.adapter;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo; 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; import org.apache.ibatis.session.Configuration;
/** /**
* @author yulichang * @author yulichang
* @since 1.4.3 * @since 1.4.3
*/ */
public class Adapter implements IAdapter { public class TableInfoAdapter implements ITableInfoAdapter {
@Override @Override
public boolean mpjHasLogic(TableInfo tableInfo) { public boolean mpjHasLogic(TableInfo tableInfo) {

View File

@ -19,7 +19,7 @@ import java.util.function.Function;
* @author yulichang * @author yulichang
* @since 1.4.3 * @since 1.4.3
*/ */
public interface MPJRelationMapper<T> extends BaseMapper<T> { public interface MPJRelationMapper<T> {
/** /**
* 通过注解实现单表多次查询 * 通过注解实现单表多次查询

View File

@ -1,7 +1,7 @@
package com.github.yulichang.config; package com.github.yulichang.config;
import com.github.yulichang.adapter.AdapterHelper; 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; import com.github.yulichang.config.enums.LogicDelTypeEnum;
/** /**
@ -31,7 +31,7 @@ public class ConfigProperties {
*/ */
public static LogicDelTypeEnum logicDelType = LogicDelTypeEnum.WHERE; public static LogicDelTypeEnum logicDelType = LogicDelTypeEnum.WHERE;
/** /**
* 适配器 * TableInfo适配器
*/ */
public static IAdapter adapter = AdapterHelper.getAdapter(); public static ITableInfoAdapter tableInfoAdapter = AdapterHelper.getTableInfoAdapter();
} }

View File

@ -2,17 +2,20 @@ package com.github.yulichang.injector;
import com.baomidou.mybatisplus.core.MybatisPlusVersion; import com.baomidou.mybatisplus.core.MybatisPlusVersion;
import com.baomidou.mybatisplus.core.injector.AbstractMethod; 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.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.methods.*; import com.baomidou.mybatisplus.core.injector.methods.*;
import com.baomidou.mybatisplus.core.mapper.Mapper; import com.baomidou.mybatisplus.core.mapper.Mapper;
import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
import com.baomidou.mybatisplus.core.toolkit.ClassUtils; import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
import com.github.yulichang.adapter.v3431.AbstractMethodV3431;
import com.github.yulichang.mapper.MPJTableMapperHelper; import com.github.yulichang.mapper.MPJTableMapperHelper;
import com.github.yulichang.method.*; import com.github.yulichang.method.*;
import com.github.yulichang.toolkit.TableHelper; import com.github.yulichang.toolkit.TableHelper;
import com.github.yulichang.toolkit.VersionUtils; import com.github.yulichang.toolkit.VersionUtils;
import com.github.yulichang.toolkit.reflect.GenericTypeUtils; import com.github.yulichang.toolkit.reflect.GenericTypeUtils;
import lombok.Getter;
import org.apache.ibatis.builder.MapperBuilderAssistant; import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.mybatis.logging.Logger; import org.mybatis.logging.Logger;
import org.mybatis.logging.LoggerFactory; import org.mybatis.logging.LoggerFactory;
@ -24,6 +27,7 @@ import java.lang.reflect.WildcardType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Stream; import java.util.stream.Stream;
import static java.util.stream.Collectors.toList; 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); 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 后对之前的版本兼容 * 升级到 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+ 改为" + logger.error(() -> "DefaultSqlInjector 的 getMethodList(Class<?> mapperClass) 方法已在 3.4.3.2+ 改为" +
"getMethodList(Class<?> mapperClass, TableInfo tableInfo)\n"); "getMethodList(Class<?> mapperClass, TableInfo tableInfo)\n");
} }
List<AbstractMethod> list = Stream.of( if (Objects.nonNull(sqlInjector)) {
new Insert(), List<AbstractMethod> methodList = AbstractMethodV3431.getMethod(sqlInjector, mapperClass);
new DeleteByMap(), return methodFilter(methodList);
new DeleteById(), } else {
new DeleteBatchByIds(), List<AbstractMethod> list = Stream.of(
new UpdateById(), new Insert(),
new SelectById(), new DeleteByMap(),
new SelectBatchByIds(), new DeleteById(),
new SelectByMap() new DeleteBatchByIds(),
).collect(toList()); new UpdateById(),
list.addAll(getJoinMethod()); new SelectById(),
list.addAll(getSelectMethod()); new SelectBatchByIds(),
return list; new SelectByMap()
).collect(toList());
list.addAll(getWrapperMethod());
list.addAll(getJoinMethod());
return list;
}
} }
/** /**
@ -68,6 +87,13 @@ public class MPJSqlInjector extends DefaultSqlInjector {
*/ */
@Override @Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) { public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
if (Objects.nonNull(sqlInjector)) {
return methodFilter(sqlInjector.getMethodList(mapperClass, tableInfo));
}
return methodFilter(super.getMethodList(mapperClass, tableInfo));
}
private List<AbstractMethod> methodFilter(List<AbstractMethod> list) {
List<String> methodList = Arrays.asList( List<String> methodList = Arrays.asList(
"Update", "Update",
"Delete", "Delete",
@ -78,9 +104,8 @@ public class MPJSqlInjector extends DefaultSqlInjector {
"SelectObjs", "SelectObjs",
"SelectList", "SelectList",
"SelectPage"); "SelectPage");
List<AbstractMethod> list = super.getMethodList(mapperClass, tableInfo);
list.removeIf(i -> methodList.contains(i.getClass().getSimpleName())); list.removeIf(i -> methodList.contains(i.getClass().getSimpleName()));
list.addAll(getSelectMethod()); list.addAll(getWrapperMethod());
list.addAll(getJoinMethod()); list.addAll(getJoinMethod());
return list; return list;
} }
@ -107,7 +132,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
return list; return list;
} }
private List<AbstractMethod> getSelectMethod() { private List<AbstractMethod> getWrapperMethod() {
List<AbstractMethod> list = new ArrayList<>(); List<AbstractMethod> list = new ArrayList<>();
list.add(new com.github.yulichang.method.mp.Delete()); 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.SelectOne());
@ -134,6 +159,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
return null == typeArguments ? null : typeArguments[index]; return null == typeArguments ? null : typeArguments[index];
} }
@SuppressWarnings("IfStatementWithIdenticalBranches")
protected Class<?> extractModelClassOld(Class<?> mapperClass) { protected Class<?> extractModelClassOld(Class<?> mapperClass) {
Type[] types = mapperClass.getGenericInterfaces(); Type[] types = mapperClass.getGenericInterfaces();
ParameterizedType target = null; ParameterizedType target = null;

View File

@ -24,7 +24,7 @@ import static java.util.stream.Collectors.joining;
public interface MPJBaseMethod extends Constants { public interface MPJBaseMethod extends Constants {
default String mpjSqlWhereEntityWrapper(boolean newLine, TableInfo table) { 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); String sqlScript = getAllSqlWhere(table, true, true, WRAPPER_ENTITY_DOT);
sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", WRAPPER_ENTITY), true); sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", WRAPPER_ENTITY), true);
sqlScript += NEWLINE; sqlScript += NEWLINE;
@ -69,7 +69,7 @@ public interface MPJBaseMethod extends Constants {
String filedSqlScript = tableInfo.getFieldList().stream() String filedSqlScript = tableInfo.getFieldList().stream()
.filter(i -> { .filter(i -> {
if (ignoreLogicDelFiled) { if (ignoreLogicDelFiled) {
return !(ConfigProperties.adapter.mpjHasLogic(tableInfo) && i.isLogicDelete()); return !(ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo) && i.isLogicDelete());
} }
return true; return true;
}) })
@ -98,7 +98,7 @@ public interface MPJBaseMethod extends Constants {
if (fieldStrategy == FieldStrategy.NEVER) { if (fieldStrategy == FieldStrategy.NEVER) {
return null; return null;
} }
if (ConfigProperties.adapter.mpjIsPrimitive(tableFieldInfo) || fieldStrategy == FieldStrategy.IGNORED) { if (ConfigProperties.tableInfoAdapter.mpjIsPrimitive(tableFieldInfo) || fieldStrategy == FieldStrategy.IGNORED) {
return sqlScript; return sqlScript;
} }
if (fieldStrategy == FieldStrategy.NOT_EMPTY && tableFieldInfo.isCharSequence()) { 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) { default String getLogicDeleteSql(TableInfo tableInfo, boolean startWithAnd, boolean isWhere) {
if (ConfigProperties.adapter.mpjHasLogic(tableInfo)) { if (ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo)) {
String logicDeleteSql = formatLogicDeleteSql(tableInfo, isWhere); String logicDeleteSql = formatLogicDeleteSql(tableInfo, isWhere);
if (startWithAnd) { if (startWithAnd) {
logicDeleteSql = " AND " + logicDeleteSql; logicDeleteSql = " AND " + logicDeleteSql;
@ -126,15 +126,15 @@ public interface MPJBaseMethod extends Constants {
default String formatLogicDeleteSql(TableInfo tableInfo, boolean isWhere) { default String formatLogicDeleteSql(TableInfo tableInfo, boolean isWhere) {
final String value = isWhere ? ConfigProperties.adapter.mpjGetLogicField(tableInfo).getLogicNotDeleteValue() : final String value = isWhere ? ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getLogicNotDeleteValue() :
ConfigProperties.adapter.mpjGetLogicField(tableInfo).getLogicDeleteValue(); ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getLogicDeleteValue();
if (isWhere) { if (isWhere) {
if (NULL.equalsIgnoreCase(value)) { if (NULL.equalsIgnoreCase(value)) {
return "${ew.alias}." + ConfigProperties.adapter.mpjGetLogicField(tableInfo).getColumn() + return "${ew.alias}." + ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getColumn() +
" IS NULL"; " IS NULL";
} else { } else {
return "${ew.alias}." + ConfigProperties.adapter.mpjGetLogicField(tableInfo).getColumn() + return "${ew.alias}." + ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).getColumn() +
EQUALS + String.format(ConfigProperties.adapter.mpjGetLogicField(tableInfo).isCharSequence() ? EQUALS + String.format(ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo).isCharSequence() ?
"'%s'" : "%s", value); "'%s'" : "%s", value);
} }
} }

View File

@ -179,7 +179,7 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
public final MPJQueryWrapper<T> selectAll(Class<?> clazz, String as) { public final MPJQueryWrapper<T> selectAll(Class<?> clazz, String as) {
TableInfo info = TableHelper.get(clazz); TableInfo info = TableHelper.get(clazz);
Assert.notNull(info, "table not find by class <%s>", 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.add(as + StringPool.DOT + info.getKeySqlSelect());
} }
selectColumns.addAll(info.getFieldList().stream().map(i -> selectColumns.addAll(info.getFieldList().stream().map(i ->

View File

@ -46,8 +46,8 @@ public class LogicInfoUtils implements Constants {
String logicStr; String logicStr;
TableInfo tableInfo = TableHelper.get(clazz); TableInfo tableInfo = TableHelper.get(clazz);
Assert.notNull(tableInfo, "table not find by class <%s>", clazz.getSimpleName()); Assert.notNull(tableInfo, "table not find by class <%s>", clazz.getSimpleName());
TableFieldInfo logicField = ConfigProperties.adapter.mpjGetLogicField(tableInfo); TableFieldInfo logicField = ConfigProperties.tableInfoAdapter.mpjGetLogicField(tableInfo);
if (ConfigProperties.adapter.mpjHasLogic(tableInfo) && Objects.nonNull(logicField)) { if (ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo) && Objects.nonNull(logicField)) {
final String value = logicField.getLogicNotDeleteValue(); final String value = logicField.getLogicNotDeleteValue();
if (NULL.equalsIgnoreCase(value)) { if (NULL.equalsIgnoreCase(value)) {
logicStr = (and ? " AND " : EMPTY) + prefix + DOT + logicField.getColumn() + " IS NULL"; logicStr = (and ? " AND " : EMPTY) + prefix + DOT + logicField.getColumn() + " IS NULL";

View File

@ -30,7 +30,7 @@ public class ColumnCache {
TableInfo tableInfo = TableHelper.get(clazz); TableInfo tableInfo = TableHelper.get(clazz);
Assert.notNull(tableInfo, "table not find by class <%s>", c.getSimpleName()); Assert.notNull(tableInfo, "table not find by class <%s>", c.getSimpleName());
List<SelectCache> list = new ArrayList<>(); List<SelectCache> 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.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())); list.addAll(tableInfo.getFieldList().stream().map(f -> new SelectCache(clazz, false, f.getColumn(), f.getPropertyType(), f.getProperty(), f)).collect(Collectors.toList()));

View File

@ -273,7 +273,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
for (MPJLambdaWrapper<?> wrapper : onWrappers) { for (MPJLambdaWrapper<?> wrapper : onWrappers) {
if (wrapper.subLogicSql && this.logicDelType == LogicDelTypeEnum.ON) { if (wrapper.subLogicSql && this.logicDelType == LogicDelTypeEnum.ON) {
TableInfo tableInfo = TableHelper.get(wrapper.getJoinClass()); TableInfo tableInfo = TableHelper.get(wrapper.getJoinClass());
if (ConfigProperties.adapter.mpjHasLogic(tableInfo)) { if (ConfigProperties.tableInfoAdapter.mpjHasLogic(tableInfo)) {
wrapper.appendSqlSegments(APPLY, () -> LogicInfoUtils.getLogicInfoNoAnd( wrapper.appendSqlSegments(APPLY, () -> LogicInfoUtils.getLogicInfoNoAnd(
wrapper.getIndex(), wrapper.getJoinClass(), wrapper.isHasAlias(), wrapper.getAlias() wrapper.getIndex(), wrapper.getJoinClass(), wrapper.isHasAlias(), wrapper.getAlias()
)); ));

View File

@ -57,7 +57,7 @@ public class SelectCache {
if (this.hasTypeHandle) { if (this.hasTypeHandle) {
TableInfo info = TableHelper.get(clazz); TableInfo info = TableHelper.get(clazz);
Assert.notNull(info, "table not find by class <%s>", clazz.getSimpleName()); 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 { } else {
this.typeHandler = null; this.typeHandler = null;
} }

View File

@ -1,11 +1,16 @@
package com.github.yulichang.test.config; package com.github.yulichang.test.config;
import com.baomidou.mybatisplus.annotation.DbType; 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.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; 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.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.github.yulichang.injector.MPJSqlInjector;
import com.github.yulichang.test.util.ThreadLocalUtils; import com.github.yulichang.test.util.ThreadLocalUtils;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.ibatis.builder.SqlSourceBuilder; import org.apache.ibatis.builder.SqlSourceBuilder;
@ -17,6 +22,9 @@ import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.RowBounds;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 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.sql.Connection;
import java.util.List; import java.util.List;
@ -41,6 +49,37 @@ public class MybatisPlusConfig {
return interceptor; return interceptor;
} }
@Bean
@Primary
@Order(Ordered.HIGHEST_PRECEDENCE)
public ISqlInjector sqlInjector() {
return new MPJSqlInjector() {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> 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 * 校验sql
*/ */

View File

@ -1,14 +1,14 @@
package com.github.yulichang.test.join.mapper; package com.github.yulichang.test.join.mapper;
import com.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.base.mapper.MPJDeepMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.io.Serializable;
import java.util.List; import java.util.List;
@Mapper @Mapper
@SuppressWarnings("unused") public interface MyBaseMapper<T> extends MPJBaseMapper<T>, MPJDeepMapper<T> {
public interface MyBaseMapper<T extends Serializable> extends MPJBaseMapper<T> {
@SuppressWarnings("UnusedReturnValue")
int insertBatchSomeColumn(List<T> entityList); int insertBatchSomeColumn(List<T> entityList);
} }

View File

@ -23,6 +23,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.jdbc.BadSqlGrammarException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -654,6 +655,10 @@ class LambdaWrapperTest {
.select(UserDO::getName) .select(UserDO::getName)
.eq(UserDO::getName, "ref"); .eq(UserDO::getName, "ref");
userMapper.selectList(wrapper); userMapper.selectList(wrapper);
try {
userMapper.insertBatchSomeColumn(new ArrayList<>());
} catch (BadSqlGrammarException ignored) {
}
} }