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 eeba6eb..02a4651 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 @@ -16,7 +16,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.ListableBeanFactory; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -39,6 +39,7 @@ import org.springframework.core.annotation.Order; import javax.sql.DataSource; import java.util.List; import java.util.Map; +import java.util.Objects; /** * springboot 自动配置类 @@ -58,16 +59,22 @@ public class MybatisPlusJoinAutoConfiguration { @SuppressWarnings("FieldCanBeLocal") private final MybatisPlusJoinProperties properties; - public MybatisPlusJoinAutoConfiguration(MybatisPlusJoinProperties properties) { - this.properties = properties; - ConfigProperties.banner = properties.getBanner(); - ConfigProperties.subTableLogic = properties.getSubTableLogic(); - ConfigProperties.msCache = properties.isMsCache(); - ConfigProperties.tableAlias = properties.getTableAlias(); - ConfigProperties.joinPrefix = properties.getJoinPrefix(); - ConfigProperties.logicDelType = "where".equalsIgnoreCase(properties.getLogicDelType()) ? + public MybatisPlusJoinAutoConfiguration(MybatisPlusJoinProperties properties, + ObjectProvider propertiesConsumers) { + MybatisPlusJoinPropertiesConsumer propertiesConsumer = propertiesConsumers.getIfAvailable(); + if (Objects.nonNull(propertiesConsumer)) { + this.properties = propertiesConsumer.config(properties); + } else { + this.properties = properties; + } + ConfigProperties.banner = this.properties.getBanner(); + ConfigProperties.subTableLogic = this.properties.getSubTableLogic(); + ConfigProperties.msCache = this.properties.isMsCache(); + ConfigProperties.tableAlias = this.properties.getTableAlias(); + ConfigProperties.joinPrefix = this.properties.getJoinPrefix(); + ConfigProperties.logicDelType = "where".equalsIgnoreCase(this.properties.getLogicDelType()) ? LogicDelTypeEnum.WHERE : LogicDelTypeEnum.ON; - ConfigProperties.mappingMaxCount = properties.getMappingMaxCount(); + ConfigProperties.mappingMaxCount = this.properties.getMappingMaxCount(); } /** @@ -85,7 +92,7 @@ public class MybatisPlusJoinAutoConfiguration { @Bean @Order(Ordered.HIGHEST_PRECEDENCE) @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) - public MPJInterceptorConfig mpjInterceptorConfig(@Autowired(required = false) List sqlSessionFactoryList) { + public MPJInterceptorConfig mpjInterceptorConfig(List sqlSessionFactoryList) { return new MPJInterceptorConfig(sqlSessionFactoryList, properties.getBanner()); } diff --git a/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinPropertiesConsumer.java b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinPropertiesConsumer.java new file mode 100644 index 0000000..3c8a86b --- /dev/null +++ b/mybatis-plus-join-boot-starter/src/main/java/com/github/yulichang/autoconfigure/MybatisPlusJoinPropertiesConsumer.java @@ -0,0 +1,18 @@ +package com.github.yulichang.autoconfigure; + +/** + * 自定义配置 + * + * @author yulichang + * @since 1.4.9 + */ +public interface MybatisPlusJoinPropertiesConsumer { + + /** + * 自定义配置,此方法会覆盖配置文件中的MPJ配置 + * + * @param properties 配置文件里的配置 + * @return 修改后的配置 + */ + MybatisPlusJoinProperties config(MybatisPlusJoinProperties properties); +} 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 b51e61c..1b54db1 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 @@ -11,11 +11,11 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.toolkit.ArrayUtils; import com.baomidou.mybatisplus.core.toolkit.ClassUtils; import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; +import com.github.yulichang.adapter.base.tookit.VersionUtils; import com.github.yulichang.adapter.v3431.AbstractMethodV3431; import com.github.yulichang.method.*; import com.github.yulichang.toolkit.MPJTableMapperHelper; import com.github.yulichang.toolkit.TableHelper; -import com.github.yulichang.adapter.base.tookit.VersionUtils; import com.github.yulichang.toolkit.reflect.GenericTypeUtils; import lombok.Getter; import org.apache.ibatis.builder.MapperBuilderAssistant; @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.function.Supplier; import java.util.stream.Stream; import static java.util.stream.Collectors.toList; @@ -167,7 +168,14 @@ public class MPJSqlInjector extends DefaultSqlInjector { Class modelClass = getSuperClassGenericType(mapperClass, Mapper.class, 0); super.inspectInject(builderAssistant, mapperClass); MPJTableMapperHelper.init(modelClass, mapperClass); - TableHelper.init(modelClass, extractModelClassOld(mapperClass)); + Supplier> supplier = () -> { + try { + return extractModelClassOld(mapperClass); + } catch (Throwable throwable) { + return null; + } + }; + TableHelper.init(modelClass, supplier.get()); } public static Class getSuperClassGenericType(final Class clazz, final Class genericIfc, final int index) {