소스 검색

生成器支持自动识别 superEntityClass 公共字段 fixed github issues/520

hubin 6 년 전
부모
커밋
8e11a5a876

+ 13 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ClassUtils.java

@@ -22,7 +22,9 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
+ * <p>
  * ClassUtils
  * ClassUtils
+ * </p>
  *
  *
  * @author Caratacus
  * @author Caratacus
  * @author HCL
  * @author HCL
@@ -44,7 +46,9 @@ public final class ClassUtils {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 判断是否为代理对象
      * 判断是否为代理对象
+     * </p>
      *
      *
      * @param clazz 传入 class 对象
      * @param clazz 传入 class 对象
      * @return 如果对象class是代理 class,返回 true
      * @return 如果对象class是代理 class,返回 true
@@ -61,7 +65,9 @@ public final class ClassUtils {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取当前对象的 class
      * 获取当前对象的 class
+     * </p>
      *
      *
      * @param clazz 传入
      * @param clazz 传入
      * @return 如果是代理的class,返回父 class,否则返回自身
      * @return 如果是代理的class,返回父 class,否则返回自身
@@ -71,7 +77,9 @@ public final class ClassUtils {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取当前对象的class
      * 获取当前对象的class
+     * </p>
      *
      *
      * @param object 对象
      * @param object 对象
      * @return 返回对象的 user class
      * @return 返回对象的 user class
@@ -82,9 +90,12 @@ public final class ClassUtils {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 根据指定的 class , 实例化一个对象,根据构造参数来实例化
      * 根据指定的 class , 实例化一个对象,根据构造参数来实例化
+     * </p>
      * <p>
      * <p>
      * 在 java9 及其之后的版本 Class.newInstance() 方法已被废弃
      * 在 java9 及其之后的版本 Class.newInstance() 方法已被废弃
+     * </p>
      *
      *
      * @param clazz 需要实例化的对象
      * @param clazz 需要实例化的对象
      * @param <T>   类型,由输入类型决定
      * @param <T>   类型,由输入类型决定
@@ -101,7 +112,9 @@ public final class ClassUtils {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 请仅在确定类存在的情况下调用该方法
      * 请仅在确定类存在的情况下调用该方法
+     * </p>
      *
      *
      * @param name 类名称
      * @param name 类名称
      * @return 返回转换后的 Class
      * @return 返回转换后的 Class

+ 26 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/ReflectionKit.java

@@ -15,8 +15,9 @@
  */
  */
 package com.baomidou.mybatisplus.core.toolkit;
 package com.baomidou.mybatisplus.core.toolkit;
 
 
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.toCollection;
+import static java.util.stream.Collectors.toMap;
 
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.InvocationTargetException;
@@ -33,12 +34,13 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.Stream;
 
 
-import static java.util.function.Function.identity;
-import static java.util.stream.Collectors.toCollection;
-import static java.util.stream.Collectors.toMap;
+import org.apache.ibatis.logging.Log;
+import org.apache.ibatis.logging.LogFactory;
 
 
 /**
 /**
+ * <p>
  * 反射工具类
  * 反射工具类
+ * </p>
  *
  *
  * @author Caratacus
  * @author Caratacus
  * @since 2016-09-22
  * @since 2016-09-22
@@ -52,7 +54,9 @@ public class ReflectionKit {
     private static final Map<Class, List<Field>> classFieldCache = new ConcurrentHashMap<>();
     private static final Map<Class, List<Field>> classFieldCache = new ConcurrentHashMap<>();
 
 
     /**
     /**
+     * <p>
      * 反射 method 方法名,例如 getId
      * 反射 method 方法名,例如 getId
+     * </p>
      *
      *
      * @param field
      * @param field
      * @param str   属性字符串内容
      * @param str   属性字符串内容
@@ -64,7 +68,9 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 反射 method 方法名,例如 setVersion
      * 反射 method 方法名,例如 setVersion
+     * </p>
      *
      *
      * @param field Field
      * @param field Field
      * @param str   String JavaBean类的version属性名
      * @param str   String JavaBean类的version属性名
@@ -80,9 +86,11 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取 public get方法的值
      * 获取 public get方法的值
+     * </p>
      *
      *
-     * @param cls ignore
+     * @param cls    ignore
      * @param entity 实体
      * @param entity 实体
      * @param str    属性字符串内容
      * @param str    属性字符串内容
      * @return Object
      * @return Object
@@ -103,7 +111,9 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取 public get方法的值
      * 获取 public get方法的值
+     * </p>
      *
      *
      * @param entity 实体
      * @param entity 实体
      * @param str    属性字符串内容
      * @param str    属性字符串内容
@@ -117,7 +127,9 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 反射对象获取泛型
      * 反射对象获取泛型
+     * </p>
      *
      *
      * @param clazz 对象
      * @param clazz 对象
      * @param index 泛型所在位置
      * @param index 泛型所在位置
@@ -144,7 +156,9 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取该类的所有属性列表
      * 获取该类的所有属性列表
+     * </p>
      *
      *
      * @param clazz 反射类
      * @param clazz 反射类
      */
      */
@@ -154,7 +168,9 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取该类的所有属性列表
      * 获取该类的所有属性列表
+     * </p>
      *
      *
      * @param clazz 反射类
      * @param clazz 反射类
      */
      */
@@ -173,7 +189,9 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取该类的所有属性列表
      * 获取该类的所有属性列表
+     * </p>
      *
      *
      * @param clazz 反射类
      * @param clazz 反射类
      */
      */
@@ -195,7 +213,9 @@ public class ReflectionKit {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 排序重置父类属性
      * 排序重置父类属性
+     * </p>
      *
      *
      * @param fieldList      子类属性
      * @param fieldList      子类属性
      * @param superFieldList 父类属性
      * @param superFieldList 父类属性

+ 5 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/StringUtils.java

@@ -15,8 +15,7 @@
  */
  */
 package com.baomidou.mybatisplus.core.toolkit;
 package com.baomidou.mybatisplus.core.toolkit;
 
 
-import com.baomidou.mybatisplus.core.toolkit.sql.StringEscape;
-import com.baomidou.mybatisplus.core.toolkit.support.BiIntFunction;
+import static java.util.stream.Collectors.joining;
 
 
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
 import java.sql.Blob;
 import java.sql.Blob;
@@ -27,10 +26,13 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.Pattern;
 
 
-import static java.util.stream.Collectors.joining;
+import com.baomidou.mybatisplus.core.toolkit.sql.StringEscape;
+import com.baomidou.mybatisplus.core.toolkit.support.BiIntFunction;
 
 
 /**
 /**
+ * <p>
  * String 工具类
  * String 工具类
+ * </p>
  *
  *
  * @author D.Yang
  * @author D.Yang
  * @since 2016-08-18
  * @since 2016-08-18
@@ -693,7 +695,6 @@ public class StringUtils {
     }
     }
 
 
     /**
     /**
-     *
      * 删除字符前缀之后,首字母小写,之后字符大小写的不变
      * 删除字符前缀之后,首字母小写,之后字符大小写的不变
      * <p>StringUtils.removePrefixAfterPrefixToLower( "isUser", 2 )     = user</p>
      * <p>StringUtils.removePrefixAfterPrefixToLower( "isUser", 2 )     = user</p>
      * <p>StringUtils.removePrefixAfterPrefixToLower( "isUserInfo", 2 ) = userInfo</p>
      * <p>StringUtils.removePrefixAfterPrefixToLower( "isUserInfo", 2 ) = userInfo</p>
@@ -707,7 +708,6 @@ public class StringUtils {
     }
     }
 
 
     /**
     /**
-     *
      * 驼峰转连字符
      * 驼峰转连字符
      * <p>StringUtils.camelToHyphen( "managerAdminUserService" ) = manager-admin-user-service</p>
      * <p>StringUtils.camelToHyphen( "managerAdminUserService" ) = manager-admin-user-service</p>
      *
      *

+ 42 - 13
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -15,11 +15,15 @@
  */
  */
 package com.baomidou.mybatisplus.core.toolkit;
 package com.baomidou.mybatisplus.core.toolkit;
 
 
-import com.baomidou.mybatisplus.annotation.*;
-import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
-import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
-import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import static java.util.stream.Collectors.toList;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.executor.keygen.KeyGenerator;
 import org.apache.ibatis.executor.keygen.KeyGenerator;
 import org.apache.ibatis.executor.keygen.NoKeyGenerator;
 import org.apache.ibatis.executor.keygen.NoKeyGenerator;
@@ -32,17 +36,20 @@ import org.apache.ibatis.mapping.SqlSource;
 import org.apache.ibatis.mapping.StatementType;
 import org.apache.ibatis.mapping.StatementType;
 import org.apache.ibatis.scripting.LanguageDriver;
 import org.apache.ibatis.scripting.LanguageDriver;
 
 
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static java.util.stream.Collectors.toList;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
 
 
 /**
 /**
+ * <p>
  * 实体类反射表辅助类
  * 实体类反射表辅助类
+ * </p>
  *
  *
  * @author hubin sjy
  * @author hubin sjy
  * @since 2016-09-09
  * @since 2016-09-09
@@ -62,7 +69,9 @@ public class TableInfoHelper {
     private static final String DEFAULT_ID_NAME = "id";
     private static final String DEFAULT_ID_NAME = "id";
 
 
     /**
     /**
+     * <p>
      * 获取实体映射表信息
      * 获取实体映射表信息
+     * </p>
      *
      *
      * @param clazz 反射实体类
      * @param clazz 反射实体类
      * @return 数据库表反射信息
      * @return 数据库表反射信息
@@ -88,7 +97,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取所有实体映射表信息
      * 获取所有实体映射表信息
+     * </p>
      *
      *
      * @return 数据库表反射信息集合
      * @return 数据库表反射信息集合
      */
      */
@@ -97,7 +108,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 实体类反射获取表信息【初始化】
      * 实体类反射获取表信息【初始化】
+     * </p>
      *
      *
      * @param clazz 反射实体类
      * @param clazz 反射实体类
      * @return 数据库表反射信息
      * @return 数据库表反射信息
@@ -139,7 +152,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 初始化 表数据库类型,表名,resultMap
      * 初始化 表数据库类型,表名,resultMap
+     * </p>
      *
      *
      * @param clazz        实体类
      * @param clazz        实体类
      * @param globalConfig 全局配置
      * @param globalConfig 全局配置
@@ -187,7 +202,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 初始化 表主键,表字段
      * 初始化 表主键,表字段
+     * </p>
      *
      *
      * @param clazz        实体类
      * @param clazz        实体类
      * @param globalConfig 全局配置
      * @param globalConfig 全局配置
@@ -240,7 +257,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 判断主键注解是否存在
      * 判断主键注解是否存在
+     * </p>
      *
      *
      * @param list 字段列表
      * @param list 字段列表
      * @return true 为存在 @TableId 注解;
      * @return true 为存在 @TableId 注解;
@@ -256,7 +275,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 主键属性初始化
      * 主键属性初始化
+     * </p>
      *
      *
      * @param dbConfig  全局配置信息
      * @param dbConfig  全局配置信息
      * @param tableInfo 表信息
      * @param tableInfo 表信息
@@ -305,7 +326,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 主键属性初始化
      * 主键属性初始化
+     * </p>
      *
      *
      * @param tableInfo 表信息
      * @param tableInfo 表信息
      * @param field     字段
      * @param field     字段
@@ -334,7 +357,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 字段属性初始化
      * 字段属性初始化
+     * </p>
      *
      *
      * @param dbConfig  数据库全局配置
      * @param dbConfig  数据库全局配置
      * @param tableInfo 表信息
      * @param tableInfo 表信息
@@ -373,7 +398,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 判定 related 的值
      * 判定 related 的值
+     * </p>
      *
      *
      * @param underCamel 驼峰命名
      * @param underCamel 驼峰命名
      * @param property   属性名
      * @param property   属性名
@@ -405,7 +432,9 @@ public class TableInfoHelper {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取该类的所有属性列表
      * 获取该类的所有属性列表
+     * </p>
      *
      *
      * @param clazz 反射类
      * @param clazz 反射类
      * @return 属性集合
      * @return 属性集合

+ 18 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlScriptUtils.java

@@ -19,7 +19,9 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 
 /**
 /**
+ * <p>
  * sql 脚本工具类
  * sql 脚本工具类
+ * </p>
  *
  *
  * @author miemie
  * @author miemie
  * @since 2018-08-15
  * @since 2018-08-15
@@ -31,7 +33,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取 带 if 标签的脚本
      * 获取 带 if 标签的脚本
+     * </p>
      *
      *
      * @param sqlScript sql 脚本片段
      * @param sqlScript sql 脚本片段
      * @return if 脚本
      * @return if 脚本
@@ -45,7 +49,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 获取 带 trim 标签的脚本
      * 获取 带 trim 标签的脚本
+     * </p>
      *
      *
      * @param sqlScript       sql 脚本片段
      * @param sqlScript       sql 脚本片段
      * @param prefix          以...开头
      * @param prefix          以...开头
@@ -73,7 +79,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 生成 choose 标签的脚本
      * 生成 choose 标签的脚本
+     * </p>
      *
      *
      * @param whenTest  when 内 test 的内容
      * @param whenTest  when 内 test 的内容
      * @param otherwise otherwise 内容
      * @param otherwise otherwise 内容
@@ -88,7 +96,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 生成 foreach 标签的脚本
      * 生成 foreach 标签的脚本
+     * </p>
      *
      *
      * @param sqlScript  foreach 内部的 sql 脚本
      * @param sqlScript  foreach 内部的 sql 脚本
      * @param collection collection
      * @param collection collection
@@ -116,7 +126,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 生成 where 标签的脚本
      * 生成 where 标签的脚本
+     * </p>
      *
      *
      * @param sqlScript where 内部的 sql 脚本
      * @param sqlScript where 内部的 sql 脚本
      * @return where 脚本
      * @return where 脚本
@@ -126,7 +138,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 生成 set 标签的脚本
      * 生成 set 标签的脚本
+     * </p>
      *
      *
      * @param sqlScript set 内部的 sql 脚本
      * @param sqlScript set 内部的 sql 脚本
      * @return set 脚本
      * @return set 脚本
@@ -136,7 +150,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 安全入参:  #{入参}
      * 安全入参:  #{入参}
+     * </p>
      *
      *
      * @param param 入参
      * @param param 入参
      * @return 脚本
      * @return 脚本
@@ -146,7 +162,9 @@ public final class SqlScriptUtils implements Constants {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 非安全入参:  ${入参}
      * 非安全入参:  ${入参}
+     * </p>
      *
      *
      * @param param 入参
      * @param param 入参
      * @return 脚本
      * @return 脚本

+ 69 - 3
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/StrategyConfig.java

@@ -15,16 +15,21 @@
  */
  */
 package com.baomidou.mybatisplus.generator.config;
 package com.baomidou.mybatisplus.generator.config;
 
 
+import java.lang.reflect.Field;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import com.baomidou.mybatisplus.generator.config.po.TableFill;
 import com.baomidou.mybatisplus.generator.config.po.TableFill;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
 import lombok.AccessLevel;
 import lombok.AccessLevel;
 import lombok.Data;
 import lombok.Data;
 import lombok.Setter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 
 
-import java.util.List;
-
 /**
 /**
  * 策略配置项
  * 策略配置项
  *
  *
@@ -46,7 +51,7 @@ public class StrategyConfig {
     /**
     /**
      * 数据库表映射到实体的命名策略
      * 数据库表映射到实体的命名策略
      */
      */
-    private NamingStrategy naming = NamingStrategy.nochange;
+    private NamingStrategy naming = NamingStrategy.no_change;
     /**
     /**
      * 数据库表字段映射到实体的命名策略
      * 数据库表字段映射到实体的命名策略
      * <p>未指定按照 naming 执行</p>
      * <p>未指定按照 naming 执行</p>
@@ -65,6 +70,7 @@ public class StrategyConfig {
     /**
     /**
      * 自定义继承的Entity类全称,带包名
      * 自定义继承的Entity类全称,带包名
      */
      */
+    @Setter(AccessLevel.NONE)
     private String superEntityClass;
     private String superEntityClass;
     /**
     /**
      * 自定义基础的Entity类,公共字段
      * 自定义基础的Entity类,公共字段
@@ -222,6 +228,66 @@ public class StrategyConfig {
         return this;
         return this;
     }
     }
 
 
+    public StrategyConfig setSuperEntityClass(String superEntityClass) {
+        this.superEntityClass = superEntityClass;
+        return this;
+    }
+
+
+    /**
+     * <p>
+     * 设置实体父类,该设置自动识别公共字段<br/>
+     * 属性 superEntityColumns 改配置无需再次配置
+     * </p>
+     * <p>
+     * 注意!!字段策略要在设置实体父类之前有效
+     * </p>
+     *
+     * @param clazz 实体父类 Class
+     * @return
+     */
+    public StrategyConfig setSuperEntityClass(Class<?> clazz) {
+        return setSuperEntityClass(clazz, null);
+    }
+
+    /**
+     * <p>
+     * 设置实体父类,该设置自动识别公共字段<br/>
+     * 属性 superEntityColumns 改配置无需再次配置
+     * </p>
+     *
+     * @param clazz        实体父类 Class
+     * @param columnNaming 字段命名策略
+     * @return
+     */
+    public StrategyConfig setSuperEntityClass(Class<?> clazz, NamingStrategy columnNaming) {
+        if (null != columnNaming) {
+            this.columnNaming = columnNaming;
+        }
+        this.superEntityClass = clazz.getSimpleName();
+        convertSuperEntityColumns(clazz);
+        return this;
+    }
+
+    /**
+     * <p>
+     * 父类 Class 反射属性转换为公共字段
+     * </p>
+     *
+     * @param clazz 实体父类 Class
+     */
+    protected void convertSuperEntityColumns(Class<?> clazz) {
+        List<Field> fields = TableInfoHelper.getAllFields(clazz);
+        if (CollectionUtils.isNotEmpty(fields)) {
+            this.superEntityColumns = fields.stream().map(field -> {
+                if (null == columnNaming || columnNaming == NamingStrategy.no_change) {
+                    return field.getName();
+                }
+                return StringUtils.camelToUnderline(field.getName());
+            }).collect(Collectors.toSet()).stream().toArray(String[]::new);
+        }
+    }
+
     /**
     /**
      * @deprecated please use `setEntityTableFieldAnnotationEnable`
      * @deprecated please use `setEntityTableFieldAnnotationEnable`
      */
      */

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

@@ -31,7 +31,7 @@ public enum NamingStrategy {
     /**
     /**
      * 不做任何改变,原样输出
      * 不做任何改变,原样输出
      */
      */
-    nochange,
+    no_change,
     /**
     /**
      * 下划线转驼峰命名
      * 下划线转驼峰命名
      */
      */
@@ -68,7 +68,7 @@ public enum NamingStrategy {
     /**
     /**
      * 去掉指定的前缀
      * 去掉指定的前缀
      *
      *
-     * @param name ignore
+     * @param name   ignore
      * @param prefix ignore
      * @param prefix ignore
      * @return ignore
      * @return ignore
      */
      */
@@ -89,7 +89,7 @@ public enum NamingStrategy {
     /**
     /**
      * 判断是否包含prefix
      * 判断是否包含prefix
      *
      *
-     * @param name ignore
+     * @param name   ignore
      * @param prefix ignore
      * @param prefix ignore
      * @return ignore
      * @return ignore
      */
      */
@@ -103,7 +103,7 @@ public enum NamingStrategy {
     /**
     /**
      * 去掉下划线前缀且将后半部分转成驼峰格式
      * 去掉下划线前缀且将后半部分转成驼峰格式
      *
      *
-     * @param name ignore
+     * @param name        ignore
      * @param tablePrefix ignore
      * @param tablePrefix ignore
      * @return ignore
      * @return ignore
      */
      */

+ 49 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/StrategyConfigTest.java

@@ -0,0 +1,49 @@
+package com.baomidou.mybatisplus.test.generator;
+
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.baomidou.mybatisplus.test.generator.entity.BaseEntity;
+import com.baomidou.mybatisplus.test.generator.entity.SuperEntity;
+
+/**
+ * <p>
+ * 策略测试
+ * </p>
+ *
+ * @author hubin
+ * @since 2019-02-20
+ */
+public class StrategyConfigTest {
+
+    @Test
+    public void baseEntity() {
+        StrategyConfig strategyConfig = new StrategyConfig();
+        strategyConfig.setSuperEntityClass(BaseEntity.class);
+        String[] columns = strategyConfig.getSuperEntityColumns();
+        Arrays.stream(columns).forEach(column -> System.out.println(column));
+        Assertions.assertEquals(columns.length, 3);
+    }
+
+    @Test
+    public void baseEntityNaming() {
+        StrategyConfig strategyConfig = new StrategyConfig();
+        strategyConfig.setSuperEntityClass(BaseEntity.class, NamingStrategy.underline_to_camel);
+        String[] columns = strategyConfig.getSuperEntityColumns();
+        Arrays.stream(columns).forEach(column -> System.out.println(column));
+        Assertions.assertEquals(columns.length, 3);
+    }
+
+    @Test
+    public void superEntity() {
+        StrategyConfig strategyConfig = new StrategyConfig();
+        strategyConfig.setSuperEntityClass(SuperEntity.class);
+        String[] columns = strategyConfig.getSuperEntityColumns();
+        Arrays.stream(columns).forEach(column -> System.out.println(column));
+        Assertions.assertEquals(columns.length, 2);
+    }
+}

+ 21 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/entity/BaseEntity.java

@@ -0,0 +1,21 @@
+package com.baomidou.mybatisplus.test.generator.entity;
+
+import java.util.Date;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 测试的基础父类
+ * </p>
+ *
+ * @author hubin
+ * @since 2019-02-20
+ */
+@Data
+public class BaseEntity extends SuperEntity {
+
+    private Boolean deleted;
+    private Date createTime;
+
+}

+ 21 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/entity/SuperEntity.java

@@ -0,0 +1,21 @@
+package com.baomidou.mybatisplus.test.generator.entity;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 测试的基础父类
+ * </p>
+ *
+ * @author hubin
+ * @since 2019-02-20
+ */
+@Data
+public class SuperEntity implements Serializable {
+
+    private Long id;
+    private Boolean deleted;
+
+}