Explorar o código

PostgreSQL 代码生成支持指定 schema 表字段按照默认排序

hubin %!s(int64=7) %!d(string=hai) anos
pai
achega
e14d13609f

+ 5 - 1
src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -480,7 +480,11 @@ public class ConfigBuilder {
         List<TableField> fieldList = new ArrayList<>();
         List<TableField> commonFieldList = new ArrayList<>();
         try {
-            PreparedStatement preparedStatement = connection.prepareStatement(String.format(querySQL.getTableFieldsSql(), tableInfo.getName()));
+            String tableFieldsSql = querySQL.getTableFieldsSql();
+            if (QuerySQL.POSTGRE_SQL == querySQL) {
+                tableFieldsSql = String.format(tableFieldsSql, dataSourceConfig.getSchemaname(), tableInfo.getName());
+            }
+            PreparedStatement preparedStatement = connection.prepareStatement(tableFieldsSql);
             ResultSet results = preparedStatement.executeQuery();
             while (results.next()) {
                 TableField field = new TableField();

+ 4 - 3
src/main/java/com/baomidou/mybatisplus/generator/config/rules/QuerySQL.java

@@ -61,9 +61,10 @@ public enum QuerySQL {
 
     POSTGRE_SQL("postgre_sql", "select tablename from pg_tables where schemaname='%s' ORDER BY tablename",
             "SELECT A.tablename, obj_description(relfilenode, 'pg_class') AS comments FROM pg_tables A, pg_class B WHERE A.schemaname='%s' AND A.tablename = B.relname",
-            "SELECT DISTINCT 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 INNER JOIN pg_class B ON A.attrelid = B.oid"
-                    + " LEFT JOIN pg_constraint C ON A.attnum = C.conkey[1] AND A.attrelid = C.conrelid WHERE B.relname = '%s' AND A.attnum>0 AND position('...' in A.attname) < 1",
+            "SELECT A.name,A.type,A.comment, (CASE C.contype WHEN 'p' THEN 'PRI' ELSE '' END) AS key FROM " +
+                    "(SELECT attnum,attrelid,attname AS name, format_type(atttypid, atttypmod) AS type,col_description(attrelid, attnum) AS comment " +
+                    "FROM pg_attribute WHERE attrelid = '%s.%s'::regclass AND attnum > 0 AND NOT attisdropped " +
+                    "ORDER  BY attnum) A LEFT JOIN pg_constraint C ON A.attnum = C.conkey[1] AND A.attrelid = C.conrelid",
             "tablename", "comments", "name", "type", "comment", "key");
 
     private final String dbType;

+ 1 - 0
src/test/java/com/baomidou/mybatisplus/test/generator/PostgreSQLGenerator.java

@@ -51,6 +51,7 @@ public class PostgreSQLGenerator {
 
         // 数据源配置
         DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setSchemaname("public");// 指定 SCHEMA
         dsc.setDbType(DbType.POSTGRE_SQL);
         dsc.setTypeConvert(new OracleTypeConvert() {
             // 自定义数据库表字段类型转换【可选】