From e5dd87ab6691d0fcd1efeaf2708ff0130d6a6c92 Mon Sep 17 00:00:00 2001 From: lengleng Date: Fri, 13 Nov 2020 11:32:55 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20Introducing=20new=20features.=20#2?= =?UTF-8?q?005=20=E5=8D=87=E7=BA=A7=20mybatis-plus=203.4.1=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8F=92=E4=BB=B6=E4=B8=BB=E4=BD=93=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pigx-common/pigx-common-bom/pom.xml | 2 +- pigx-common/pigx-common-core/pom.xml | 6 ++ .../common/core/config/JacksonConfig.java | 26 +++++- .../data/datascope/DataScopeInterceptor.java | 4 +- .../mybatis/MybatisPlusConfiguration.java | 81 +++++++++++-------- .../common/data/resolver/WebMvcConfig.java | 66 --------------- .../common/data/tenant/PigxTenantHandler.java | 19 ++--- .../main/resources/META-INF/spring.factories | 3 +- pom.xml | 2 +- 9 files changed, 93 insertions(+), 116 deletions(-) delete mode 100644 pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/resolver/WebMvcConfig.java diff --git a/pigx-common/pigx-common-bom/pom.xml b/pigx-common/pigx-common-bom/pom.xml index 0686ab79c..cf6589f66 100644 --- a/pigx-common/pigx-common-bom/pom.xml +++ b/pigx-common/pigx-common-bom/pom.xml @@ -18,7 +18,7 @@ 3.10.0 - 3.4.0 + 3.4.1 3.2.0 1.2.3 8.0.22 diff --git a/pigx-common/pigx-common-core/pom.xml b/pigx-common/pigx-common-core/pom.xml index d7d8c82b5..80c3fc82e 100644 --- a/pigx-common/pigx-common-core/pom.xml +++ b/pigx-common/pigx-common-core/pom.xml @@ -40,6 +40,12 @@ hutool-all ${hutool.version} + + + org.springframework + spring-webmvc + provided + javax.servlet diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfig.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfig.java index da53f09b9..47cb1f4fa 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfig.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfig.java @@ -6,11 +6,16 @@ import com.pig4cloud.pigx.common.core.jackson.PigxJavaTimeModule; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.format.FormatterRegistry; +import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import java.time.format.DateTimeFormatter; import java.util.Locale; import java.util.TimeZone; @@ -26,7 +31,8 @@ import java.util.TimeZone; @Configuration @ConditionalOnClass(ObjectMapper.class) @AutoConfigureBefore(JacksonAutoConfiguration.class) -public class JacksonConfig { +@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) +public class JacksonConfig implements WebMvcConfigurer { private static final String ASIA_SHANGHAI = "Asia/Shanghai"; @@ -41,4 +47,22 @@ public class JacksonConfig { }; } + /** + * 增加GET请求参数中时间类型转换 {@link com.pig4cloud.pigx.common.core.jackson.PigxJavaTimeModule} + *
    + *
  • HH:mm:ss -> LocalTime
  • + *
  • yyyy-MM-dd -> LocalDate
  • + *
  • yyyy-MM-dd HH:mm:ss -> LocalDateTime
  • + *
+ * @param registry + */ + @Override + public void addFormatters(FormatterRegistry registry) { + DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); + registrar.setTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)); + registrar.setDateFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)); + registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)); + registrar.registerFormatters(registry); + } + } diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java index ec5325629..e0ca09182 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java @@ -21,7 +21,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.statement.StatementHandler; @@ -44,7 +44,7 @@ import java.util.Properties; * mybatis 数据权限拦截器 */ @Slf4j -@AllArgsConstructor +@RequiredArgsConstructor @Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class, Integer.class }) }) public class DataScopeInterceptor extends AbstractSqlParserHandler implements Interceptor { diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfiguration.java index 55cacd397..5e1475681 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfiguration.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfiguration.java @@ -17,24 +17,26 @@ package com.pig4cloud.pigx.common.data.mybatis; -import com.baomidou.mybatisplus.core.parser.ISqlParser; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.pig4cloud.pigx.common.data.datascope.DataScopeHandle; import com.pig4cloud.pigx.common.data.datascope.DataScopeInterceptor; import com.pig4cloud.pigx.common.data.datascope.DataScopeSqlInjector; import com.pig4cloud.pigx.common.data.datascope.PigxDefaultDatascopeHandle; +import com.pig4cloud.pigx.common.data.resolver.SqlFilterArgumentResolver; import com.pig4cloud.pigx.common.data.tenant.PigxTenantHandler; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.sql.DataSource; -import java.util.ArrayList; import java.util.List; /** @@ -44,7 +46,43 @@ import java.util.List; @Configuration @ConditionalOnBean(DataSource.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) -public class MybatisPlusConfiguration { +public class MybatisPlusConfiguration implements WebMvcConfigurer { + + /** + * 增加请求参数解析器,对请求中的参数注入SQL 检查 + * @param resolverList + */ + @Override + public void addArgumentResolvers(List resolverList) { + resolverList.add(new SqlFilterArgumentResolver()); + } + + /** + * 数据权限插件 优先 mybatis-plus 的拦截器执行 + * @return DataScopeInterceptor + */ + @Bean + @ConditionalOnMissingBean + @ConditionalOnBean(DataScopeHandle.class) + public DataScopeInterceptor dataScopeInterceptor() { + return new DataScopeInterceptor(dataScopeHandle()); + } + + /** + * mybatis plus 拦截器配置 + * @return + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 多租户支持 + TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(); + tenantLineInnerInterceptor.setTenantLineHandler(pigxTenantHandler()); + interceptor.addInnerInterceptor(tenantLineInnerInterceptor); + // 分页支持 + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } /** * 创建租户维护处理器对象 @@ -57,25 +95,7 @@ public class MybatisPlusConfiguration { } /** - * 分页插件 - * @param tenantHandler 租户处理器 - * @return PaginationInterceptor - */ - @Bean - @ConditionalOnMissingBean - @ConditionalOnProperty(name = "mybatisPlus.tenantEnable", havingValue = "true", matchIfMissing = true) - public PaginationInterceptor paginationInterceptor(PigxTenantHandler tenantHandler) { - PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); - List sqlParserList = new ArrayList<>(); - TenantSqlParser tenantSqlParser = new TenantSqlParser(); - tenantSqlParser.setTenantHandler(tenantHandler); - sqlParserList.add(tenantSqlParser); - paginationInterceptor.setSqlParserList(sqlParserList); - return paginationInterceptor; - } - - /** - * pigx 默认数据权限处理 + * pigx 默认数据权限处理器 * @return */ @Bean @@ -85,16 +105,9 @@ public class MybatisPlusConfiguration { } /** - * 数据权限插件 - * @return DataScopeInterceptor + * 扩展 mybatis-plus baseMapper 支持数据权限 + * @return */ - @Bean - @ConditionalOnMissingBean - @ConditionalOnBean(DataScopeHandle.class) - public DataScopeInterceptor dataScopeInterceptor() { - return new DataScopeInterceptor(dataScopeHandle()); - } - @Bean @ConditionalOnBean(DataScopeHandle.class) public DataScopeSqlInjector dataScopeSqlInjector() { diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/resolver/WebMvcConfig.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/resolver/WebMvcConfig.java deleted file mode 100644 index 17bd13854..000000000 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/resolver/WebMvcConfig.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018-2025, lengleng All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the pig4cloud.com developer nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * Author: lengleng (wangiegie@gmail.com) - */ - -package com.pig4cloud.pigx.common.data.resolver; - -import cn.hutool.core.date.DatePattern; -import org.springframework.context.annotation.Configuration; -import org.springframework.format.FormatterRegistry; -import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import java.time.format.DateTimeFormatter; -import java.util.List; - -/** - * SpringMvc 规则增强 - * - * @author lengleng - * @date 2020-06-17 - */ -@Configuration -public class WebMvcConfig implements WebMvcConfigurer { - - /** - * 增加请求参数解析器,对请求中的参数注入SQL 检查 - * @param argumentResolvers - */ - @Override - public void addArgumentResolvers(List argumentResolvers) { - argumentResolvers.add(new SqlFilterArgumentResolver()); - } - - /** - * 增加GET请求参数中时间类型转换 {@link com.pig4cloud.pigx.common.core.jackson.PigxJavaTimeModule} - *
    - *
  • HH:mm:ss -> LocalTime
  • - *
  • yyyy-MM-dd -> LocalDate
  • - *
  • yyyy-MM-dd HH:mm:ss -> LocalDateTime
  • - *
- * @param registry - */ - @Override - public void addFormatters(FormatterRegistry registry) { - DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); - registrar.setTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)); - registrar.setDateFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)); - registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)); - registrar.registerFormatters(registry); - } - -} diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java index 0e106b5de..a61304931 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java @@ -17,7 +17,7 @@ package com.pig4cloud.pigx.common.data.tenant; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; @@ -31,19 +31,18 @@ import org.springframework.beans.factory.annotation.Autowired; * 租户维护处理器 */ @Slf4j -public class PigxTenantHandler implements TenantHandler { +public class PigxTenantHandler implements TenantLineHandler { @Autowired private PigxTenantConfigProperties properties; /** - * 获取租户值 + * 获取租户 ID 值表达式,只支持单个 ID 值 *

- * TODO 校验租户状态 - * @return 租户值 + * @return 租户 ID 值表达式 */ @Override - public Expression getTenantId(boolean where) { + public Expression getTenantId() { Integer tenantId = TenantContextHolder.getTenantId(); log.debug("当前租户为 >> {}", tenantId); @@ -63,12 +62,14 @@ public class PigxTenantHandler implements TenantHandler { } /** - * 根据表名判断是否进行过滤 + * 根据表名判断是否忽略拼接多租户条件 + *

+ * 默认都要进行解析并拼接多租户条件 * @param tableName 表名 - * @return 是否进行过滤 + * @return 是否忽略, true:表示忽略,false:需要解析并拼接多租户条件 */ @Override - public boolean doTableFilter(String tableName) { + public boolean ignoreTable(String tableName) { Integer tenantId = TenantContextHolder.getTenantId(); // 租户中ID 为空,查询全部,不进行过滤 if (tenantId == null) { diff --git a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories index 679dfbecc..3ec872b65 100644 --- a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories @@ -6,5 +6,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.pig4cloud.pigx.common.data.tenant.TenantContextHolderFilter,\ com.pig4cloud.pigx.common.data.tenant.PigxTenantConfiguration,\ com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfiguration,\ - com.pig4cloud.pigx.common.data.resolver.TenantKeyStrResolver,\ - com.pig4cloud.pigx.common.data.resolver.WebMvcConfig + com.pig4cloud.pigx.common.data.resolver.TenantKeyStrResolver diff --git a/pom.xml b/pom.xml index e956494c7..5646fedf6 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ - 2.3.5.RELEASE + 2.3.6.RELEASE Hoxton.SR9 2.2.3.RELEASE UTF-8