yulichang 2023-04-29 12:16:47 +08:00
parent 8b1362eefa
commit 90941058ce
2 changed files with 20 additions and 11 deletions

View File

@ -1,7 +1,6 @@
package com.github.yulichang.autoconfigure; 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.ISqlInjector; import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.github.yulichang.autoconfigure.conditional.MPJSqlInjectorCondition; import com.github.yulichang.autoconfigure.conditional.MPJSqlInjectorCondition;
import com.github.yulichang.config.ConfigProperties; import com.github.yulichang.config.ConfigProperties;
@ -15,6 +14,7 @@ import org.mybatis.spring.SqlSessionFactoryBean;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@ -70,6 +70,7 @@ public class MybatisPlusJoinAutoConfiguration {
* mybatis plus join 拦截器 * mybatis plus join 拦截器
*/ */
@Bean @Bean
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJInterceptor mpjInterceptor() { public MPJInterceptor mpjInterceptor() {
return new MPJInterceptor(); return new MPJInterceptor();
} }
@ -78,8 +79,8 @@ public class MybatisPlusJoinAutoConfiguration {
* mybatis plus 拦截器配置 * mybatis plus 拦截器配置
*/ */
@Bean @Bean
@ConditionalOnBean(SqlSessionFactory.class) @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJInterceptorConfig mpjInterceptorConfig(List<SqlSessionFactory> sqlSessionFactoryList) { public MPJInterceptorConfig mpjInterceptorConfig(@Autowired(required = false) List<SqlSessionFactory> sqlSessionFactoryList) {
return new MPJInterceptorConfig(sqlSessionFactoryList, properties.getBanner()); return new MPJInterceptorConfig(sqlSessionFactoryList, properties.getBanner());
} }
@ -91,7 +92,8 @@ public class MybatisPlusJoinAutoConfiguration {
@MPJSqlInjectorCondition @MPJSqlInjectorCondition
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnBean(ISqlInjector.class) @ConditionalOnBean(ISqlInjector.class)
public MPJSqlInjector mpjSqlInjector(AbstractSqlInjector sqlInjector) { @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJSqlInjector mpjSqlInjector(ISqlInjector sqlInjector) {
logger.info("MPJSqlInjector init"); logger.info("MPJSqlInjector init");
return new MPJSqlInjector(sqlInjector); return new MPJSqlInjector(sqlInjector);
} }
@ -102,6 +104,7 @@ public class MybatisPlusJoinAutoConfiguration {
@Bean @Bean
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnMissingBean(ISqlInjector.class) @ConditionalOnMissingBean(ISqlInjector.class)
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJSqlInjector mpjSqlInjectorOnMiss() { public MPJSqlInjector mpjSqlInjectorOnMiss() {
logger.info("MPJSqlInjector init"); logger.info("MPJSqlInjector init");
return new MPJSqlInjector(); return new MPJSqlInjector();
@ -112,13 +115,14 @@ public class MybatisPlusJoinAutoConfiguration {
*/ */
@Bean @Bean
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
public SpringContentUtils mpjSpringContent(MPJSpringContext springContext) { @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public SpringContentUtils mpjSpringContent(@Autowired(required = false) MPJSpringContext springContext) {
return new SpringContentUtils(springContext); return new SpringContentUtils(springContext);
} }
@Configuration @Configuration
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnBean(SqlSessionFactory.class) @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public static class MPJMappingConfig implements ApplicationListener<ApplicationReadyEvent> { public static class MPJMappingConfig implements ApplicationListener<ApplicationReadyEvent> {
@Override @Override
@SuppressWarnings("NullableProblems") @SuppressWarnings("NullableProblems")
@ -128,7 +132,7 @@ public class MybatisPlusJoinAutoConfiguration {
} }
@Configuration @Configuration
@ConditionalOnBean(SqlSessionFactory.class) @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public static class MPJSpringContext implements SpringContentUtils.SpringContext, ApplicationContextAware { public static class MPJSpringContext implements SpringContentUtils.SpringContext, ApplicationContextAware {
private ApplicationContext applicationContext; private ApplicationContext applicationContext;

View File

@ -4,6 +4,7 @@ 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.AbstractSqlInjector;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
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;
@ -48,8 +49,10 @@ public class MPJSqlInjector extends DefaultSqlInjector {
public MPJSqlInjector() { public MPJSqlInjector() {
} }
public MPJSqlInjector(AbstractSqlInjector sqlInjector) { public MPJSqlInjector(ISqlInjector sqlInjector) {
this.sqlInjector = sqlInjector; if (Objects.nonNull(sqlInjector) && sqlInjector instanceof AbstractSqlInjector) {
this.sqlInjector = (AbstractSqlInjector) sqlInjector;
}
} }
/** /**
@ -107,14 +110,15 @@ public class MPJSqlInjector extends DefaultSqlInjector {
"SelectPage"); "SelectPage");
list.removeIf(i -> methodList.contains(i.getClass().getSimpleName()) && list.removeIf(i -> methodList.contains(i.getClass().getSimpleName()) &&
Objects.equals(packageStr, i.getClass().getPackage().getName())); Objects.equals(packageStr, i.getClass().getPackage().getName()));
addAll(list,getWrapperMethod()); addAll(list, getWrapperMethod());
addAll(list,getJoinMethod()); addAll(list, getJoinMethod());
return list; return list;
} }
private List<AbstractMethod> getJoinMethod() { private List<AbstractMethod> getJoinMethod() {
List<AbstractMethod> list = new ArrayList<>(); List<AbstractMethod> list = new ArrayList<>();
if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.5.0") >= 0) { if (VersionUtils.compare(MybatisPlusVersion.getVersion(), "3.5.0") >= 0) {
list.add(new DeleteJoin(SqlMethod.DELETE_JOIN.getMethod()));
list.add(new SelectJoinCount(SqlMethod.SELECT_JOIN_COUNT.getMethod())); list.add(new SelectJoinCount(SqlMethod.SELECT_JOIN_COUNT.getMethod()));
list.add(new SelectJoinOne(SqlMethod.SELECT_JOIN_ONE.getMethod())); list.add(new SelectJoinOne(SqlMethod.SELECT_JOIN_ONE.getMethod()));
list.add(new SelectJoinList(SqlMethod.SELECT_JOIN_LIST.getMethod())); list.add(new SelectJoinList(SqlMethod.SELECT_JOIN_LIST.getMethod()));
@ -123,6 +127,7 @@ public class MPJSqlInjector extends DefaultSqlInjector {
list.add(new SelectJoinMaps(SqlMethod.SELECT_JOIN_MAPS.getMethod())); list.add(new SelectJoinMaps(SqlMethod.SELECT_JOIN_MAPS.getMethod()));
list.add(new SelectJoinMapsPage(SqlMethod.SELECT_JOIN_MAPS_PAGE.getMethod())); list.add(new SelectJoinMapsPage(SqlMethod.SELECT_JOIN_MAPS_PAGE.getMethod()));
} else { } else {
list.add(new DeleteJoin());
list.add(new SelectJoinCount()); list.add(new SelectJoinCount());
list.add(new SelectJoinOne()); list.add(new SelectJoinOne());
list.add(new SelectJoinList()); list.add(new SelectJoinList());