mirror of
https://gitee.com/best_handsome/mybatis-plus-join
synced 2025-07-11 00:02:22 +08:00
类名修改
This commit is contained in:
parent
3c3fb3272c
commit
dfa9baea93
@ -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);
|
||||
|
@ -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) {
|
@ -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>
|
@ -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);
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@
|
||||
<modules>
|
||||
<module>mybatis-plus-join-adapter-base</module>
|
||||
<module>mybatis-plus-join-adapter-v33x</module>
|
||||
<module>mybatis-plus-join-adapter-v3431</module>
|
||||
<module>mybatis-plus-join-adapter-v352</module>
|
||||
</modules>
|
||||
|
||||
|
@ -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<ApplicationReadyEvent> {
|
||||
public static class MPJMappingConfig implements ApplicationListener<ApplicationReadyEvent> {
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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 {
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -54,6 +54,11 @@
|
||||
<artifactId>mybatis-plus-join-adapter-v33x</artifactId>
|
||||
<version>1.4.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join-adapter-v3431</artifactId>
|
||||
<version>1.4.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join-adapter-v352</artifactId>
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
@ -19,7 +19,7 @@ import java.util.function.Function;
|
||||
* @author yulichang
|
||||
* @since 1.4.3
|
||||
*/
|
||||
public interface MPJRelationMapper<T> extends BaseMapper<T> {
|
||||
public interface MPJRelationMapper<T> {
|
||||
|
||||
/**
|
||||
* 通过注解实现单表多次查询
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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,6 +62,10 @@ public class MPJSqlInjector extends DefaultSqlInjector {
|
||||
logger.error(() -> "DefaultSqlInjector 的 getMethodList(Class<?> mapperClass) 方法已在 3.4.3.2+ 改为" +
|
||||
"getMethodList(Class<?> mapperClass, TableInfo tableInfo)\n");
|
||||
}
|
||||
if (Objects.nonNull(sqlInjector)) {
|
||||
List<AbstractMethod> methodList = AbstractMethodV3431.getMethod(sqlInjector, mapperClass);
|
||||
return methodFilter(methodList);
|
||||
} else {
|
||||
List<AbstractMethod> list = Stream.of(
|
||||
new Insert(),
|
||||
new DeleteByMap(),
|
||||
@ -58,16 +76,24 @@ public class MPJSqlInjector extends DefaultSqlInjector {
|
||||
new SelectBatchByIds(),
|
||||
new SelectByMap()
|
||||
).collect(toList());
|
||||
list.addAll(getWrapperMethod());
|
||||
list.addAll(getJoinMethod());
|
||||
list.addAll(getSelectMethod());
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* mybatis plus 3.4.3.2
|
||||
*/
|
||||
@Override
|
||||
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(
|
||||
"Update",
|
||||
"Delete",
|
||||
@ -78,9 +104,8 @@ public class MPJSqlInjector extends DefaultSqlInjector {
|
||||
"SelectObjs",
|
||||
"SelectList",
|
||||
"SelectPage");
|
||||
List<AbstractMethod> 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<AbstractMethod> getSelectMethod() {
|
||||
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());
|
||||
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -179,7 +179,7 @@ public class MPJQueryWrapper<T> extends AbstractWrapper<T, String, MPJQueryWrapp
|
||||
public final MPJQueryWrapper<T> 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 ->
|
||||
|
@ -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";
|
||||
|
@ -30,7 +30,7 @@ public class ColumnCache {
|
||||
TableInfo tableInfo = TableHelper.get(clazz);
|
||||
Assert.notNull(tableInfo, "table not find by class <%s>", c.getSimpleName());
|
||||
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.addAll(tableInfo.getFieldList().stream().map(f -> new SelectCache(clazz, false, f.getColumn(), f.getPropertyType(), f.getProperty(), f)).collect(Collectors.toList()));
|
||||
|
@ -273,7 +273,7 @@ public class MPJLambdaWrapper<T> extends MPJAbstractLambdaWrapper<T, MPJLambdaWr
|
||||
for (MPJLambdaWrapper<?> 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()
|
||||
));
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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<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
|
||||
*/
|
||||
|
@ -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<T extends Serializable> extends MPJBaseMapper<T> {
|
||||
public interface MyBaseMapper<T> extends MPJBaseMapper<T>, MPJDeepMapper<T> {
|
||||
|
||||
@SuppressWarnings("UnusedReturnValue")
|
||||
int insertBatchSomeColumn(List<T> entityList);
|
||||
}
|
||||
|
@ -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) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user