类名修改

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
* @since 1.4.3
*/
public interface IAdapter {
public interface ITableInfoAdapter {
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.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) {

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>
<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>

View File

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

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>
<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>

View File

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

View File

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

View File

@ -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> {
/**
* 通过注解实现单表多次查询

View File

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

View File

@ -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;

View File

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

View File

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

View File

@ -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";

View File

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

View File

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

View File

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

View File

@ -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
*/

View File

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

View File

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