From ed32e8c569634ae78e1d9bb4c25c5d58cf33d816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Fri, 14 Jul 2023 10:22:37 +0800 Subject: [PATCH] fix: codegen can not get oracle comments --- .../com/mybatisflex/codegen/Generator.java | 2 +- .../mybatisflex/codegen/dialect/IDialect.java | 8 +++++- .../codegen/dialect/JdbcDialect.java | 28 ++++++++++++++++--- .../codegen/dialect/SqliteDialect.java | 2 +- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/Generator.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/Generator.java index 1b2c2d41..13861e77 100644 --- a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/Generator.java +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/Generator.java @@ -107,7 +107,7 @@ public class Generator { buildPrimaryKey(table); - dialect.buildTableColumns(table, globalConfig, dbMeta, conn); + dialect.buildTableColumns(schemaName,table, globalConfig, dbMeta, conn); tables.add(table); } diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/IDialect.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/IDialect.java index 231d0155..2a519707 100644 --- a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/IDialect.java +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/IDialect.java @@ -62,6 +62,11 @@ public interface IDialect { public ResultSet getTablesResultSet(DatabaseMetaData dbMeta, Connection conn, String schema, String[] types) throws SQLException { return dbMeta.getTables(conn.getCatalog(), StringUtil.isNotBlank(schema) ? schema : dbMeta.getUserName(), null, types); } + + @Override + protected ResultSet forRemarks(String schema, Table table, DatabaseMetaData dbMeta, Connection conn) throws SQLException { + return dbMeta.getColumns(conn.getCatalog(), StringUtil.isNotBlank(schema) ? schema : dbMeta.getUserName(), table.getName(), null); + } }; /** @@ -72,13 +77,14 @@ public interface IDialect { /** * 构建表和列的信息。 * + * @param schemaName * @param table 存入的表对象 * @param globalConfig 全局配置 * @param dbMeta 数据库元数据 * @param conn 连接 * @throws SQLException 发生 SQL 异常时抛出 */ - void buildTableColumns(Table table, GlobalConfig globalConfig, DatabaseMetaData dbMeta, Connection conn) throws SQLException; + void buildTableColumns(String schemaName, Table table, GlobalConfig globalConfig, DatabaseMetaData dbMeta, Connection conn) throws SQLException; /** * 获取表的描述信息。 diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/JdbcDialect.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/JdbcDialect.java index 2f4258f9..0394a4da 100644 --- a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/JdbcDialect.java +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/JdbcDialect.java @@ -29,8 +29,8 @@ import java.util.Map; public abstract class JdbcDialect implements IDialect { @Override - public void buildTableColumns(Table table, GlobalConfig globalConfig, DatabaseMetaData dbMeta, Connection conn) throws SQLException { - Map columnRemarks = buildColumnRemarks(table, dbMeta, conn); + public void buildTableColumns(String schemaName, Table table, GlobalConfig globalConfig, DatabaseMetaData dbMeta, Connection conn) throws SQLException { + Map columnRemarks = buildColumnRemarks(schemaName,table, dbMeta, conn); String sql = forBuildColumnsSql(table.getSchema(), table.getName()); try (Statement stm = conn.createStatement(); ResultSet rs = stm.executeQuery(sql)) { @@ -55,9 +55,9 @@ public abstract class JdbcDialect implements IDialect { } } - private Map buildColumnRemarks(Table table, DatabaseMetaData dbMeta, Connection conn) { + private Map buildColumnRemarks(String schemaName, Table table, DatabaseMetaData dbMeta, Connection conn) { Map columnRemarks = new HashMap<>(); - try (ResultSet colRs = dbMeta.getColumns(conn.getCatalog(), null, table.getName(), null)) { + try (ResultSet colRs = forRemarks(schemaName,table, dbMeta, conn)) { while (colRs.next()) { columnRemarks.put(colRs.getString("COLUMN_NAME"), colRs.getString("REMARKS")); } @@ -67,6 +67,7 @@ public abstract class JdbcDialect implements IDialect { return columnRemarks; } + @Override public ResultSet getTablesResultSet(DatabaseMetaData dbMeta, Connection conn, String schema, String[] types) throws SQLException { return dbMeta.getTables(conn.getCatalog(), schema, null, types); @@ -81,4 +82,23 @@ public abstract class JdbcDialect implements IDialect { */ abstract String forBuildColumnsSql(String schema, String tableName); + + /** + * 构建 remarks 的 ResultSet + * + * @param schemaName + * @param table + * @param dbMeta + * @param conn + * @return + * @throws SQLException + */ + protected ResultSet forRemarks(String schemaName, Table table, DatabaseMetaData dbMeta, Connection conn) throws SQLException { + return dbMeta.getColumns(conn.getCatalog(), null, table.getName(), null); + } + + + + + } diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/SqliteDialect.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/SqliteDialect.java index 96257739..1d68ddb5 100644 --- a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/SqliteDialect.java +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/dialect/SqliteDialect.java @@ -29,7 +29,7 @@ import java.sql.*; public class SqliteDialect implements IDialect { @Override - public void buildTableColumns(Table table, GlobalConfig globalConfig, DatabaseMetaData dbMeta, Connection conn) throws SQLException { + public void buildTableColumns(String schemaName, Table table, GlobalConfig globalConfig, DatabaseMetaData dbMeta, Connection conn) throws SQLException { Statement statement = conn.createStatement(); ResultSet rs = statement.executeQuery("pragma table_info(" + table.getName() + ")");