Browse Source

生成器支持自定义 SQL 自定义查询字段

= 7 years ago
parent
commit
6909112c2e

+ 6 - 0
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/IDbQuery.java

@@ -95,4 +95,10 @@ public interface IDbQuery {
      * @throws SQLException
      */
     boolean isKeyIdentity(ResultSet results) throws SQLException;
+
+
+    /**
+     * 自定义字段名称
+     */
+    String[] fieldCustom();
 }

+ 9 - 0
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -583,6 +583,15 @@ public class ConfigBuilder {
                 } else {
                     field.setKeyFlag(false);
                 }
+                // 自定义字段查询
+                String[] fcs = dbQuery.fieldCustom();
+                if (null != fcs) {
+                    Map<String, Object> customMap = new HashMap<>();
+                    for (String fc : fcs) {
+                        customMap.put(fc, results.getObject(fc));
+                    }
+                    field.setCustomMap(customMap);
+                }
                 // 处理其它信息
                 field.setName(results.getString(dbQuery.fieldName()));
                 field.setType(results.getString(dbQuery.fieldType()));

+ 15 - 1
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/po/TableField.java

@@ -15,6 +15,8 @@
  */
 package com.baomidou.mybatisplus.generator.config.po;
 
+import java.util.Map;
+
 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
 import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
@@ -41,6 +43,10 @@ public class TableField {
     private DbColumnType columnType;
     private String comment;
     private String fill;
+    /**
+     * 自定义查询字段列表
+     */
+    private Map<String, Object> customMap;
 
     public boolean isConvert() {
         return convert;
@@ -144,7 +150,7 @@ public class TableField {
         // 第一个字母 小写、 第二个字母 大写 ,特殊处理
         String firstChar = setGetName.substring(0, 1);
         if (Character.isLowerCase(firstChar.toCharArray()[0])
-                && Character.isUpperCase(setGetName.substring(1, 2).toCharArray()[0])) {
+            && Character.isUpperCase(setGetName.substring(1, 2).toCharArray()[0])) {
             return firstChar.toLowerCase() + setGetName.substring(1);
         }
         return firstChar.toUpperCase() + setGetName.substring(1);
@@ -157,4 +163,12 @@ public class TableField {
     public void setFill(String fill) {
         this.fill = fill;
     }
+
+    public Map<String, Object> getCustomMap() {
+        return customMap;
+    }
+
+    public void setCustomMap(Map<String, Object> customMap) {
+        this.customMap = customMap;
+    }
 }

+ 6 - 0
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/querys/AbstractDbQuery.java

@@ -35,4 +35,10 @@ public abstract class AbstractDbQuery implements IDbQuery {
     public boolean isKeyIdentity(ResultSet results) throws SQLException {
         return false;
     }
+
+
+    @Override
+    public String[] fieldCustom() {
+        return null;
+    }
 }

+ 1 - 2
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/querys/MySqlQuery.java

@@ -18,7 +18,6 @@ package com.baomidou.mybatisplus.generator.config.querys;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
-import com.baomidou.mybatisplus.generator.config.IDbQuery;
 import com.baomidou.mybatisplus.generator.config.rules.DbType;
 
 /**
@@ -29,7 +28,7 @@ import com.baomidou.mybatisplus.generator.config.rules.DbType;
  * @author hubin
  * @since 2018-01-16
  */
-public class MySqlQuery implements IDbQuery {
+public class MySqlQuery extends AbstractDbQuery {
 
 
     @Override

+ 1 - 0
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/querys/PostgreSqlQuery.java

@@ -82,4 +82,5 @@ public class PostgreSqlQuery extends AbstractDbQuery {
     public String fieldKey() {
         return "key";
     }
+
 }

+ 1 - 2
mybatis-plus-generate/src/main/java/com/baomidou/mybatisplus/generator/config/querys/SqlServerQuery.java

@@ -18,7 +18,6 @@ package com.baomidou.mybatisplus.generator.config.querys;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
-import com.baomidou.mybatisplus.generator.config.IDbQuery;
 import com.baomidou.mybatisplus.generator.config.rules.DbType;
 
 /**
@@ -29,7 +28,7 @@ import com.baomidou.mybatisplus.generator.config.rules.DbType;
  * @author hubin
  * @since 2018-01-16
  */
-public class SqlServerQuery implements IDbQuery {
+public class SqlServerQuery extends AbstractDbQuery {
 
 
     @Override

+ 22 - 0
mybatis-plus-generate/src/test/java/com/baomidou/mybatisplus/test/generator/MyPostgreSqlQuery.java

@@ -0,0 +1,22 @@
+package com.baomidou.mybatisplus.test.generator;
+
+import com.baomidou.mybatisplus.generator.config.querys.PostgreSqlQuery;
+
+public class MyPostgreSqlQuery extends PostgreSqlQuery {
+
+
+    @Override
+    public String tableFieldsSql() {
+        // 固定 abc  def 内容,实际可以查询字段大小等信息
+        return "SELECT 1 AS abc, 2 AS def, A.attname AS name, format_type(A.atttypid, A.atttypmod) AS type,col_description(A.attrelid, A.attnum) AS comment, (CASE C.contype WHEN 'p' THEN 'PRI' ELSE '' END) AS key " +
+            "FROM pg_attribute A LEFT JOIN pg_constraint C ON A.attnum = C.conkey[1] AND A.attrelid = C.conrelid " +
+            "WHERE  A.attrelid = '%s.%s'::regclass AND A.attnum > 0 AND NOT A.attisdropped ORDER  BY A.attnum";
+    }
+
+
+    @Override
+    public String[] fieldCustom() {
+        // 返回自定义查询字段
+        return new String[]{"abc", "def"};
+    }
+}

+ 2 - 0
mybatis-plus-generate/src/test/java/com/baomidou/mybatisplus/test/generator/PostgreSQLGenerator.java

@@ -65,6 +65,8 @@ public class PostgreSQLGenerator extends GeneratorTest {
                 return super.processTypeConvert(fieldType);
             }
         });
+        // 自定义数据库信息查询
+        dsc.setDbQuery(new MyPostgreSqlQuery());
         dsc.setDriverName("org.postgresql.Driver");
         dsc.setUsername("postgres");
         dsc.setPassword("521");

+ 6 - 0
mybatis-plus-generate/src/test/resources/templates/dto.java.ftl

@@ -9,3 +9,9 @@ package ${package.Entity};
  * 测试注入 ${cfg.abc}
  */
 
+
+// 自定义的查询内容
+<#list table.fields as field>
+    自定义 abc 内容: ${field.customMap.abc}
+    自定义 def 内容: ${field.customMap.def}
+</#list>

+ 6 - 0
mybatis-plus-generate/src/test/resources/templates/dto.java.vm

@@ -7,3 +7,9 @@ package ${package.Entity};
  * </p>
  * 测试注入 ${cfg.abc}
  */
+
+// 自定义的查询内容
+#foreach($field in ${table.fields})
+    自定义 abc 内容: ${field.customMap.abc}
+    自定义 def 内容: ${field.customMap.def}
+#end