瀏覽代碼

优化策略配置项.

nieqiurong 4 年之前
父節點
當前提交
802c533453

+ 17 - 32
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/StrategyConfig.java

@@ -70,12 +70,12 @@ public class StrategyConfig {
      * 表前缀
      */
     @Setter(AccessLevel.NONE)
-    private String[] tablePrefix;
+    private final Set<String> tablePrefix = new HashSet<>();
     /**
      * 字段前缀
      */
     @Setter(AccessLevel.NONE)
-    private String[] fieldPrefix;
+    private final Set<String> fieldPrefix = new HashSet<>();
     /**
      * 自定义继承的Entity类全称,带包名
      */
@@ -85,7 +85,7 @@ public class StrategyConfig {
      * 自定义基础的Entity类,公共字段
      */
     @Setter(AccessLevel.NONE)
-    private Set<String> superEntityColumns = new HashSet<>();
+    private final Set<String> superEntityColumns = new HashSet<>();
     /**
      * 自定义继承的Mapper类全称,带包名
      */
@@ -107,13 +107,13 @@ public class StrategyConfig {
      * 当{@link #enableSqlFilter}为true时,正则表达式无效.
      */
     @Setter(AccessLevel.NONE)
-    private String[] include = null;
+    private final Set<String> include = new HashSet<>();
     /**
      * 需要排除的表名,允许正则表达式<br/>
      * 当{@link #enableSqlFilter}为true时,正则表达式无效.
      */
     @Setter(AccessLevel.NONE)
-    private String[] exclude = null;
+    private final Set<String> exclude = new HashSet<>();
     /**
      * 实体是否生成 serialVersionUID
      */
@@ -219,13 +219,7 @@ public class StrategyConfig {
      */
     @Deprecated
     public boolean containsTablePrefix(String tableName) {
-        if (null != tableName) {
-            String[] tps = getTablePrefix();
-            if (null != tps) {
-                return Arrays.stream(tps).anyMatch(tableName::contains);
-            }
-        }
-        return false;
+        return getTablePrefix().stream().anyMatch(tableName::contains);
     }
 
     /**
@@ -235,13 +229,7 @@ public class StrategyConfig {
      * @since 3.3.2
      */
     public boolean startsWithTablePrefix(String tableName) {
-        if (null != tableName) {
-            String[] tps = getTablePrefix();
-            if (null != tps) {
-                return Arrays.stream(tps).anyMatch(tableName::startsWith);
-            }
-        }
-        return false;
+        return getTablePrefix().stream().anyMatch(tableName::startsWith);
     }
 
     public NamingStrategy getColumnNaming() {
@@ -250,16 +238,13 @@ public class StrategyConfig {
     }
 
     public StrategyConfig setTablePrefix(String... tablePrefix) {
-        this.tablePrefix = tablePrefix;
+        this.tablePrefix.addAll(Arrays.asList(tablePrefix));
         return this;
     }
 
     public boolean includeSuperEntityColumns(String fieldName) {
-        if (null != superEntityColumns) {
-            // 公共字段判断忽略大小写【 部分数据库大小写不敏感 】
-            return superEntityColumns.stream().anyMatch(e -> e.equalsIgnoreCase(fieldName));
-        }
-        return false;
+        // 公共字段判断忽略大小写【 部分数据库大小写不敏感 】
+        return superEntityColumns.stream().anyMatch(e -> e.equalsIgnoreCase(fieldName));
     }
 
     public StrategyConfig setSuperEntityColumns(String... superEntityColumns) {
@@ -268,17 +253,17 @@ public class StrategyConfig {
     }
 
     public StrategyConfig setInclude(String... include) {
-        this.include = include;
+        this.include.addAll(Arrays.asList(include));
         return this;
     }
 
     public StrategyConfig setExclude(String... exclude) {
-        this.exclude = exclude;
+        this.exclude.addAll(Arrays.asList(exclude));
         return this;
     }
 
     public StrategyConfig setFieldPrefix(String... fieldPrefixs) {
-        this.fieldPrefix = fieldPrefixs;
+        this.fieldPrefix.addAll(Arrays.asList(fieldPrefixs));
         return this;
     }
 
@@ -405,15 +390,15 @@ public class StrategyConfig {
         return setChainModel(entityBuilderModel);
     }
 
-    public String[] getSuperEntityColumns() {
-        if (StringUtils.isNotBlank(superEntityClass)) {
+    public Set<String> getSuperEntityColumns() {
+        if (StringUtils.isNotBlank(this.superEntityClass)) {
             try {
-                Class<?> superEntity = ClassUtils.toClassConfident(superEntityClass);
+                Class<?> superEntity = ClassUtils.toClassConfident(this.superEntityClass);
                 convertSuperEntityColumns(superEntity);
             } catch (Exception e) {
                 //当父类实体存在类加载器的时候,识别父类实体字段,不存在的情况就只有通过指定superEntityColumns属性了。
             }
         }
-        return superEntityColumns.toArray(new String[]{});
+        return this.superEntityColumns;
     }
 }

+ 13 - 43
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -16,7 +16,6 @@
 package com.baomidou.mybatisplus.generator.config.builder;
 
 import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -56,14 +55,7 @@ public class ConfigBuilder {
     /**
      * SQL连接
      */
-    private Connection connection;
-    /**
-     * SQL语句类型
-     */
-    @Deprecated
-    private IDbQuery dbQuery;
-    @Deprecated
-    private DbType dbType;
+    private final Connection connection;
     private String superEntityClass;
     private String superMapperClass;
     /**
@@ -96,11 +88,6 @@ public class ConfigBuilder {
      * 注入配置信息
      */
     private InjectionConfig injectionConfig;
-    /**
-     * 是否支持注释
-     */
-    @Deprecated
-    private boolean commentSupported;
     /**
      * 过滤正则
      */
@@ -128,11 +115,9 @@ public class ConfigBuilder {
             handlerPackage(this.template, this.globalConfig.getOutputDir(), packageConfig);
         }
         this.dataSourceConfig = dataSourceConfig;
-        handlerDataSource(dataSourceConfig);
+        this.connection = dataSourceConfig.getConn();
         // 策略配置
         this.strategyConfig = Optional.ofNullable(strategyConfig).orElseGet(StrategyConfig::new);
-        //SQLITE 数据库不支持注释获取
-        commentSupported = !dataSourceConfig.getDbType().equals(DbType.SQLITE);
 
         handlerStrategy(this.strategyConfig);
     }
@@ -255,18 +240,6 @@ public class ConfigBuilder {
         }
     }
 
-    /**
-     * 处理数据源配置
-     *
-     * @param config DataSourceConfig
-     */
-    private void handlerDataSource(DataSourceConfig config) {
-        connection = config.getConn();
-        dbType = config.getDbType();
-        dbQuery = config.getDbQuery();
-    }
-
-
     /**
      * 处理数据库表 加载数据库表、列、注释相关数据集
      *
@@ -316,7 +289,6 @@ public class ConfigBuilder {
      * @return 补充完整信息后的表
      */
     private List<TableInfo> processTable(List<TableInfo> tableList, StrategyConfig config) {
-        String[] tablePrefix = config.getTablePrefix();
         for (TableInfo tableInfo : tableList) {
             String entityName;
             INameConvert nameConvert = strategyConfig.getNameConvert();
@@ -324,7 +296,7 @@ public class ConfigBuilder {
                 // 自定义处理实体名称
                 entityName = nameConvert.entityNameConvert(tableInfo);
             } else {
-                entityName = NamingStrategy.capitalFirst(processName(tableInfo.getName(), config.getNaming(), tablePrefix));
+                entityName = NamingStrategy.capitalFirst(processName(tableInfo.getName(), config.getNaming(), config.getTablePrefix()));
             }
             if (StringUtils.isNotBlank(globalConfig.getEntityName())) {
                 tableInfo.setConvert(true);
@@ -396,8 +368,8 @@ public class ConfigBuilder {
      * 获取所有的数据库表信息
      */
     private List<TableInfo> getTablesInfo(StrategyConfig config) {
-        boolean isInclude = (null != config.getInclude() && config.getInclude().length > 0);
-        boolean isExclude = (null != config.getExclude() && config.getExclude().length > 0);
+        boolean isInclude = config.getInclude().size() > 0;
+        boolean isExclude = config.getExclude().size() > 0;
         if (isInclude && isExclude) {
             throw new RuntimeException("<strategy> 标签中 <include> 与 <exclude> 只能配置一项!");
         }
@@ -461,10 +433,10 @@ public class ConfigBuilder {
                 }
                 if (isInclude) {
                     sql.append(" AND ").append(dbQuery.tableName()).append(" IN (")
-                        .append(Arrays.stream(config.getInclude()).map(tb -> "'" + tb + "'").collect(Collectors.joining(","))).append(")");
+                        .append(config.getInclude().stream().map(tb -> "'" + tb + "'").collect(Collectors.joining(","))).append(")");
                 } else if (isExclude) {
                     sql.append(" AND ").append(dbQuery.tableName()).append(" NOT IN (")
-                        .append(Arrays.stream(config.getExclude()).map(tb -> "'" + tb + "'").collect(Collectors.joining(","))).append(")");
+                        .append(config.getExclude().stream().map(tb -> "'" + tb + "'").collect(Collectors.joining(","))).append(")");
                 }
             }
             TableInfo tableInfo;
@@ -639,12 +611,10 @@ public class ConfigBuilder {
                     field.setName(columnName);
                     String newColumnName = columnName;
                     IKeyWordsHandler keyWordsHandler = dataSourceConfig.getKeyWordsHandler();
-                    if (keyWordsHandler != null) {
-                        if (keyWordsHandler.isKeyWords(columnName)) {
-                            System.err.println(String.format("当前表[%s]存在字段[%s]为数据库关键字或保留字!", tableName, columnName));
-                            field.setKeyWords(true);
-                            newColumnName = keyWordsHandler.formatColumn(columnName);
-                        }
+                    if (keyWordsHandler != null && keyWordsHandler.isKeyWords(columnName)) {
+                        System.err.printf("当前表[%s]存在字段[%s]为数据库关键字或保留字!%n", tableName, columnName);
+                        field.setKeyWords(true);
+                        newColumnName = keyWordsHandler.formatColumn(columnName);
                     }
                     field.setColumnName(newColumnName);
                     field.setType(results.getString(dbQuery.fieldType()));
@@ -732,9 +702,9 @@ public class ConfigBuilder {
      * @param prefix   ignore
      * @return 根据策略返回处理后的名称
      */
-    private String processName(String name, NamingStrategy strategy, String[] prefix) {
+    private String processName(String name, NamingStrategy strategy, Set<String> prefix) {
         String propertyName;
-        if (ArrayUtils.isNotEmpty(prefix)) {
+        if (prefix.size() > 0) {
             if (strategy == NamingStrategy.underline_to_camel) {
                 // 删除前缀、下划线转驼峰
                 propertyName = NamingStrategy.removePrefixAndCamel(name, prefix);

+ 19 - 1
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/rules/NamingStrategy.java

@@ -16,6 +16,8 @@
 package com.baomidou.mybatisplus.generator.config.rules;
 
 import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -71,15 +73,23 @@ public enum NamingStrategy {
      * @param name   ignore
      * @param prefix ignore
      * @return ignore
+     * @see #removePrefix(String, Set)
+     * @deprecated 3.4.1
      */
+    @Deprecated
     public static String removePrefix(String name, String... prefix) {
+        Set<String> set = new HashSet<>(Arrays.asList(prefix));
+        return removePrefix(name, set);
+    }
+
+    public static String removePrefix(String name, Set<String> prefix) {
         if (StringUtils.isBlank(name)) {
             return StringPool.EMPTY;
         }
         if (null != prefix) {
             // 判断是否有匹配的前缀,然后截取前缀
             // 删除前缀
-            return Arrays.stream(prefix).filter(pf -> name.toLowerCase()
+            return prefix.stream().filter(pf -> name.toLowerCase()
                 .matches(StringPool.HAT + pf.toLowerCase() + ".*"))
                 .findFirst().map(pf -> name.substring(pf.length())).orElse(name);
         }
@@ -106,11 +116,19 @@ public enum NamingStrategy {
      * @param name        ignore
      * @param tablePrefix ignore
      * @return ignore
+     * @see #removePrefix(String, Set)
+     * @deprecated 3.4.1
      */
+    @Deprecated
     public static String removePrefixAndCamel(String name, String[] tablePrefix) {
         return underlineToCamel(removePrefix(name, tablePrefix));
     }
 
+    public static String removePrefixAndCamel(String name, Set<String> tablePrefix) {
+        return underlineToCamel(removePrefix(name, tablePrefix));
+    }
+
+
     /**
      * 实体首字母大写
      *

+ 18 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/config/rules/NamingStrategyTest.java

@@ -0,0 +1,18 @@
+package com.baomidou.mybatisplus.generator.config.rules;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.HashSet;
+
+public class NamingStrategyTest {
+
+    @Test
+    void removePrefixTest() {
+        Assertions.assertEquals(NamingStrategy.removePrefix("test_ab", "t_", "test"), "_ab");
+        Assertions.assertEquals(NamingStrategy.removePrefix("test_ab", new HashSet<>(Arrays.asList("t_", "test"))), "_ab");
+    }
+
+
+}

+ 20 - 11
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/StrategyConfigTest.java

@@ -16,6 +16,7 @@
 package com.baomidou.mybatisplus.test.generator;
 
 import java.util.Arrays;
+import java.util.Set;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -44,29 +45,29 @@ class StrategyConfigTest {
     void baseEntity() {
         StrategyConfig strategyConfig = new StrategyConfig();
         strategyConfig.setSuperEntityClass(BaseEntity.class);
-        String[] columns = strategyConfig.getSuperEntityColumns();
-        Arrays.stream(columns).forEach(System.out::println);
+        Set<String> columns = strategyConfig.getSuperEntityColumns();
+        columns.forEach(System.out::println);
         assertThat(columns).containsAll(Arrays.asList("deleted", "createTime", "id"));
-        Assertions.assertEquals(columns.length, 3);
+        Assertions.assertEquals(columns.size(), 3);
     }
 
     @Test
     void baseEntityNaming() {
         StrategyConfig strategyConfig = new StrategyConfig();
         strategyConfig.setSuperEntityClass(BaseEntity.class, NamingStrategy.underline_to_camel);
-        String[] columns = strategyConfig.getSuperEntityColumns();
-        Arrays.stream(columns).forEach(System.out::println);
+        Set<String> columns = strategyConfig.getSuperEntityColumns();
+        columns.forEach(System.out::println);
         assertThat(columns).containsAll(Arrays.asList("deleted", "create_time", "id"));
-        Assertions.assertEquals(columns.length, 3);
+        Assertions.assertEquals(columns.size(), 3);
 
         strategyConfig = new StrategyConfig();
         strategyConfig.setSuperEntityColumns("aa", "bb").setSuperEntityClass(BaseEntity.class, NamingStrategy.underline_to_camel);
-        Assertions.assertEquals(strategyConfig.getSuperEntityColumns().length, 5);
+        Assertions.assertEquals(strategyConfig.getSuperEntityColumns().size(), 5);
         assertThat(strategyConfig.getSuperEntityColumns()).containsAll(Arrays.asList("aa", "bb", "deleted", "create_time", "id"));
 
         strategyConfig = new StrategyConfig();
         strategyConfig.setSuperEntityClass(BaseEntity.class, NamingStrategy.underline_to_camel).setSuperEntityColumns("aa", "bb");
-        Assertions.assertEquals(strategyConfig.getSuperEntityColumns().length, 5);
+        Assertions.assertEquals(strategyConfig.getSuperEntityColumns().size(), 5);
         assertThat(strategyConfig.getSuperEntityColumns()).containsAll(Arrays.asList("aa", "bb", "deleted", "create_time", "id"));
     }
 
@@ -74,10 +75,10 @@ class StrategyConfigTest {
     void superEntity() {
         StrategyConfig strategyConfig = new StrategyConfig();
         strategyConfig.setSuperEntityClass(SuperEntity.class);
-        String[] columns = strategyConfig.getSuperEntityColumns();
-        Arrays.stream(columns).forEach(System.out::println);
+        Set<String> columns = strategyConfig.getSuperEntityColumns();
+        columns.forEach(System.out::println);
         assertThat(columns).containsAll(Arrays.asList("deleted", "id"));
-        Assertions.assertEquals(columns.length, 2);
+        Assertions.assertEquals(columns.size(), 2);
     }
 
     @Test
@@ -102,6 +103,14 @@ class StrategyConfigTest {
 
     }
 
+    @Test
+    void startsWithTablePrefixTest(){
+        StrategyConfig strategyConfig = new StrategyConfig();
+        Assertions.assertFalse(strategyConfig.startsWithTablePrefix("t_name"));
+        strategyConfig.setTablePrefix("a_","t_");
+        Assertions.assertTrue(strategyConfig.startsWithTablePrefix("t_name"));
+    }
+
     @Data
     static class SuperBean {