ソースを参照

Merge branch 'dev' of https://git.oschina.net/baomidou/mybatis-plus into dev

= 8 年 前
コミット
7c4a01fd5a

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

@@ -15,24 +15,7 @@
  */
 package com.baomidou.mybatisplus.generator.config.builder;
 
-import java.io.File;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import com.baomidou.mybatisplus.generator.config.ConstVal;
-import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
-import com.baomidou.mybatisplus.generator.config.GlobalConfig;
-import com.baomidou.mybatisplus.generator.config.PackageConfig;
-import com.baomidou.mybatisplus.generator.config.StrategyConfig;
-import com.baomidou.mybatisplus.generator.config.TemplateConfig;
+import com.baomidou.mybatisplus.generator.config.*;
 import com.baomidou.mybatisplus.generator.config.po.TableField;
 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import com.baomidou.mybatisplus.generator.config.rules.DbType;
@@ -40,6 +23,13 @@ import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 import com.baomidou.mybatisplus.generator.config.rules.QuerySQL;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
 
+import java.io.File;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
 /**
  * 配置汇总 传递给文件生成工具
  *
@@ -345,10 +335,10 @@ public class ConfigBuilder {
         Set<String> notExistTables = new HashSet<>();
 
         NamingStrategy strategy = config.getNaming();
-        PreparedStatement pstate = null;
+        PreparedStatement preparedStatement = null;
         try {
-            pstate = connection.prepareStatement(querySQL.getTableCommentsSql());
-            ResultSet results = pstate.executeQuery();
+            preparedStatement = connection.prepareStatement(querySQL.getTableCommentsSql());
+            ResultSet results = preparedStatement.executeQuery();
             TableInfo tableInfo;
             while (results.next()) {
                 String tableName = results.getString(querySQL.getTableName());
@@ -374,9 +364,7 @@ public class ConfigBuilder {
                             }
                         }
                     }
-                    List<TableField> fieldList = getListFields(tableName, strategy);
-                    tableInfo.setFields(fieldList);
-                    tableList.add(tableInfo);
+                    tableList.add(this.convertTableFields(tableInfo, strategy));
                 } else {
                     System.err.println("当前数据库为空!!!");
                 }
@@ -403,8 +391,8 @@ public class ConfigBuilder {
         } finally {
             // 释放资源
             try {
-                if (pstate != null) {
-                    pstate.close();
+                if (preparedStatement != null) {
+                    preparedStatement.close();
                 }
                 if (connection != null) {
                     connection.close();
@@ -435,17 +423,21 @@ public class ConfigBuilder {
     }
 
     /**
+     * <p>
      * 将字段信息与表信息关联
+     * </p>
      *
-     * @param tableName 表名称
+     * @param tableInfo 表信息
      * @param strategy  命名策略
-     * @return 表信息
+     * @return
      */
-    private List<TableField> getListFields(String tableName, NamingStrategy strategy) {
+    private TableInfo convertTableFields(TableInfo tableInfo, NamingStrategy strategy) {
         boolean haveId = false;
         List<TableField> fieldList = new ArrayList<>();
-        try (PreparedStatement pstate = connection.prepareStatement(String.format(querySQL.getTableFieldsSql(), tableName));
-             ResultSet results = pstate.executeQuery()) {
+        List<TableField> commonFieldList = new ArrayList<>();
+        try {
+            PreparedStatement preparedStatement = connection.prepareStatement(String.format(querySQL.getTableFieldsSql(), tableInfo.getName()));
+            ResultSet results = preparedStatement.executeQuery();
             while (results.next()) {
                 TableField field = new TableField();
                 String key = results.getString(querySQL.getFieldKey());
@@ -463,20 +455,23 @@ public class ConfigBuilder {
                 }
                 // 处理其它信息
                 field.setName(results.getString(querySQL.getFieldName()));
-                if (strategyConfig.includeSuperEntityColumns(field.getName())) {
-                    // 跳过公共字段
-                    continue;
-                }
                 field.setType(results.getString(querySQL.getFieldType()));
                 field.setPropertyName(strategyConfig, processName(field.getName(), strategy));
                 field.setColumnType(dataSourceConfig.getTypeConvert().processTypeConvert(field.getType()));
                 field.setComment(results.getString(querySQL.getFieldComment()));
+                if (strategyConfig.includeSuperEntityColumns(field.getName())) {
+                    // 跳过公共字段
+                    commonFieldList.add(field);
+                    continue;
+                }
                 fieldList.add(field);
             }
         } catch (SQLException e) {
             System.err.println("SQL Exception:" + e.getMessage());
         }
-        return fieldList;
+        tableInfo.setFields(fieldList);
+        tableInfo.setCommonFields(commonFieldList);
+        return tableInfo;
     }
 
     /**

+ 9 - 0
mybatis-plus/src/main/java/com/baomidou/mybatisplus/generator/config/po/TableInfo.java

@@ -47,6 +47,7 @@ public class TableInfo {
     private String controllerName;
 
     private List<TableField> fields;
+    private List<TableField> commonFields;// 公共字段
     private List<String> importPackages = new ArrayList<>();
     private String fieldNames;
 
@@ -183,6 +184,14 @@ public class TableInfo {
         }
     }
 
+    public List<TableField> getCommonFields() {
+        return commonFields;
+    }
+
+    public void setCommonFields(List<TableField> commonFields) {
+        this.commonFields = commonFields;
+    }
+
     public List<String> getImportPackages() {
         return importPackages;
     }

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

@@ -125,9 +125,6 @@ public enum NamingStrategy {
     public static String capitalFirst(String name) {
         if (StringUtils.isNotEmpty(name)) {
             return name.substring(0, 1).toUpperCase() + name.substring(1);
-            /*char[] array = name.toCharArray();
-			array[0] -= 32;
-			return String.valueOf(array);*/
         }
         return "";
     }

+ 0 - 3
mybatis-plus/src/main/java/com/baomidou/mybatisplus/generator/config/rules/QuerySQL.java

@@ -131,7 +131,4 @@ public enum QuerySQL {
         return fieldKey;
     }
 
-    public static void main(String[] args) {
-        System.out.println(POSTGRE_SQL.getTableFieldsSql());
-    }
 }

+ 31 - 21
mybatis-plus/src/main/java/com/baomidou/mybatisplus/toolkit/ReflectionKit.java

@@ -15,25 +15,16 @@
  */
 package com.baomidou.mybatisplus.toolkit;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ibatis.logging.Log;
-import org.apache.ibatis.logging.LogFactory;
-
 import com.baomidou.mybatisplus.entity.TableFieldInfo;
 import com.baomidou.mybatisplus.entity.TableInfo;
 import com.baomidou.mybatisplus.enums.FieldStrategy;
 import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
+import org.apache.ibatis.logging.Log;
+import org.apache.ibatis.logging.LogFactory;
+
+import java.lang.reflect.*;
+import java.util.*;
+
 
 /**
  * <p>
@@ -149,16 +140,12 @@ public class ReflectionKit {
      */
     @SuppressWarnings("rawtypes")
     public static Class getSuperClassGenricType(final Class clazz, final int index) {
-
         Type genType = clazz.getGenericSuperclass();
-
         if (!(genType instanceof ParameterizedType)) {
             logger.warn(String.format("Warn: %s's superclass not ParameterizedType", clazz.getSimpleName()));
             return Object.class;
         }
-
         Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
-
         if (index >= params.length || index < 0) {
             logger.warn(String.format("Warn: Index: %s, Size of %s's Parameterized Type: %s .", index, clazz.getSimpleName(),
                     params.length));
@@ -168,7 +155,6 @@ public class ReflectionKit {
             logger.warn(String.format("Warn: %s not set the actual class on superclass generic parameter", clazz.getSimpleName()));
             return Object.class;
         }
-
         return (Class) params[index];
     }
 
@@ -218,7 +204,31 @@ public class ReflectionKit {
         if (superClass.equals(Object.class)) {
             return fieldList;
         }
-        fieldList.addAll(getFieldList(superClass));
+        /* 排除重载属性 */
+        return excludeOverrideSuperField(fieldList, getFieldList(superClass));
+    }
+
+    /**
+     * <p>
+     * 排序重置父类属性
+     * </p>
+     *
+     * @param fieldList      子类属性
+     * @param superFieldList 父类属性
+     */
+    public static List<Field> excludeOverrideSuperField(List<Field> fieldList, List<Field> superFieldList) {
+        // 子类属性
+        Map<String, Field> fieldMap = new HashMap<>();
+        for (Field field : fieldList) {
+            fieldMap.put(field.getName(), field);
+        }
+        for (Field superField : superFieldList) {
+            if (null == fieldMap.get(superField.getName())) {
+                // 加入重置父类属性
+                fieldList.add(superField);
+            }
+        }
         return fieldList;
     }
+
 }

+ 1 - 1
mybatis-plus/src/main/java/com/baomidou/mybatisplus/toolkit/TableInfoHelper.java

@@ -347,7 +347,7 @@ public class TableInfoHelper {
      * @param clazz 反射类
      * @return
      */
-    private static List<Field> getAllFields(Class<?> clazz) {
+    public static List<Field> getAllFields(Class<?> clazz) {
         List<Field> fieldList = ReflectionKit.getFieldList(clazz);
         if (CollectionUtils.isNotEmpty(fieldList)) {
             Iterator<Field> iterator = fieldList.iterator();

+ 3 - 0
mybatis-plus/src/main/resources/templates/mapper.xml.vm

@@ -15,6 +15,9 @@
 		<id column="${field.name}" property="${field.propertyName}" />
 #end
 #end
+#foreach($field in ${table.commonFields})##生成公共字段
+	<result column="${field.name}" property="${field.propertyName}" />
+#end
 #foreach($field in ${table.fields})
 #if(!${field.keyFlag})##生成普通字段
 		<result column="${field.name}" property="${field.propertyName}" />