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;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration;
import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.github.yulichang.autoconfigure.conditional.MPJSqlInjectorCondition;
import com.github.yulichang.config.ConfigProperties;
@ -15,6 +14,7 @@ import org.mybatis.spring.SqlSessionFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@ -70,6 +70,7 @@ public class MybatisPlusJoinAutoConfiguration {
* mybatis plus join 拦截器
*/
@Bean
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJInterceptor mpjInterceptor() {
return new MPJInterceptor();
}
@ -78,8 +79,8 @@ public class MybatisPlusJoinAutoConfiguration {
* mybatis plus 拦截器配置
*/
@Bean
@ConditionalOnBean(SqlSessionFactory.class)
public MPJInterceptorConfig mpjInterceptorConfig(List<SqlSessionFactory> sqlSessionFactoryList) {
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJInterceptorConfig mpjInterceptorConfig(@Autowired(required = false) List<SqlSessionFactory> sqlSessionFactoryList) {
return new MPJInterceptorConfig(sqlSessionFactoryList, properties.getBanner());
}
@ -91,7 +92,8 @@ public class MybatisPlusJoinAutoConfiguration {
@MPJSqlInjectorCondition
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnBean(ISqlInjector.class)
public MPJSqlInjector mpjSqlInjector(AbstractSqlInjector sqlInjector) {
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJSqlInjector mpjSqlInjector(ISqlInjector sqlInjector) {
logger.info("MPJSqlInjector init");
return new MPJSqlInjector(sqlInjector);
}
@ -102,6 +104,7 @@ public class MybatisPlusJoinAutoConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnMissingBean(ISqlInjector.class)
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public MPJSqlInjector mpjSqlInjectorOnMiss() {
logger.info("MPJSqlInjector init");
return new MPJSqlInjector();
@ -112,13 +115,14 @@ public class MybatisPlusJoinAutoConfiguration {
*/
@Bean
@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);
}
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnBean(SqlSessionFactory.class)
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public static class MPJMappingConfig implements ApplicationListener<ApplicationReadyEvent> {
@Override
@SuppressWarnings("NullableProblems")
@ -128,7 +132,7 @@ public class MybatisPlusJoinAutoConfiguration {
}
@Configuration
@ConditionalOnBean(SqlSessionFactory.class)
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
public static class MPJSpringContext implements SpringContentUtils.SpringContext, ApplicationContextAware {
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.AbstractSqlInjector;
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.mapper.Mapper;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
@ -48,8 +49,10 @@ public class MPJSqlInjector extends DefaultSqlInjector {
public MPJSqlInjector() {
}
public MPJSqlInjector(AbstractSqlInjector sqlInjector) {
this.sqlInjector = sqlInjector;
public MPJSqlInjector(ISqlInjector sqlInjector) {
if (Objects.nonNull(sqlInjector) && sqlInjector instanceof AbstractSqlInjector) {
this.sqlInjector = (AbstractSqlInjector) sqlInjector;
}
}
/**
@ -107,14 +110,15 @@ public class MPJSqlInjector extends DefaultSqlInjector {
"SelectPage");
list.removeIf(i -> methodList.contains(i.getClass().getSimpleName()) &&
Objects.equals(packageStr, i.getClass().getPackage().getName()));
addAll(list,getWrapperMethod());
addAll(list,getJoinMethod());
addAll(list, getWrapperMethod());
addAll(list, getJoinMethod());
return list;
}
private List<AbstractMethod> getJoinMethod() {
List<AbstractMethod> list = new ArrayList<>();
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 SelectJoinOne(SqlMethod.SELECT_JOIN_ONE.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 SelectJoinMapsPage(SqlMethod.SELECT_JOIN_MAPS_PAGE.getMethod()));
} else {
list.add(new DeleteJoin());
list.add(new SelectJoinCount());
list.add(new SelectJoinOne());
list.add(new SelectJoinList());