Commit 6b68aa95fecd3c2eebe351b16703712fa7c5562e

Authored by YunaiV
1 parent 3950c58c

增加 DatabaseTableOracleDAOImpl 实现

yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/db/DatabaseColumnDO.java
... ... @@ -25,6 +25,11 @@ public class DatabaseColumnDO {
25 25 /**
26 26 * 字段类型
27 27 */
  28 + private String dataType;
  29 + /**
  30 + * 字段类型
  31 + */
  32 + @Deprecated
28 33 private String columnType;
29 34 /**
30 35 * 字段描述
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/db/DatabaseTableMySQLDAOImpl.java
... ... @@ -41,11 +41,10 @@ public class DatabaseTableMySQLDAOImpl implements DatabaseTableDAO {
41 41 @Override
42 42 public List<DatabaseColumnDO> selectColumnList(Connection connection, String tableName) {
43 43 // 拼接 SQL
44   - String sql = "SELECT table_name, column_name, column_type, column_comment, " +
  44 + String sql = "SELECT table_name, column_name, column_type, column_comment, ordinal_position" +
45 45 " (CASE WHEN is_nullable = 'yes' THEN '1' ELSE '0' END) AS nullable," +
46 46 " (CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END) AS primary_key," +
47 47 " (CASE WHEN extra = 'auto_increment' THEN '1' ELSE '0' END) AS auto_increment," +
48   - " ordinal_position" +
49 48 " FROM information_schema.COLUMNS" +
50 49 " WHERE table_schema = (SELECT DATABASE())" +
51 50 String.format(" AND table_name = '%s'", tableName);
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/db/DatabaseTableOracleDAOImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.infra.dal.mysql.db;
  2 +
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.yudao.framework.mybatis.core.util.JdbcUtils;
  5 +import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseColumnDO;
  6 +import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseTableDO;
  7 +import com.baomidou.mybatisplus.annotation.DbType;
  8 +import org.springframework.stereotype.Repository;
  9 +
  10 +import java.sql.Connection;
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * {@link DatabaseTableDAO} 的 Oracle 实现类
  15 + *
  16 + * @author 芋道源码
  17 + */
  18 +@Repository
  19 +public class DatabaseTableOracleDAOImpl implements DatabaseTableDAO {
  20 +
  21 + @Override
  22 + public List<DatabaseTableDO> selectTableList(Connection connection, String tableNameLike, String tableCommentLike) {
  23 + // 拼接 SQL
  24 + String sql = "SELECT tbl.table_name, col.comments, obj.created" +
  25 + " FROM user_tables tbl, user_tab_comments col, user_objects obj" +
  26 + " WHERE tbl.table_name = col.table_name" +
  27 + " AND tbl.table_name = obj.object_name" +
  28 + " AND obj.object_type = 'TABLE'";
  29 + if (StrUtil.isNotEmpty(tableNameLike)) {
  30 + sql += StrUtil.format(" AND tbl.table_name LIKE '%{}%'", tableNameLike);
  31 + }
  32 + if (StrUtil.isNotEmpty(tableCommentLike)) {
  33 + sql += StrUtil.format(" AND col.comments LIKE '%{}%'", tableCommentLike);
  34 + }
  35 + // 执行并返回结果
  36 + return JdbcUtils.query(connection, sql, (rs, rowNum) -> DatabaseTableDO.builder()
  37 + .tableName(rs.getString("table_name"))
  38 + .tableComment(rs.getString("comments"))
  39 + .createTime(rs.getDate("created"))
  40 + .build());
  41 + }
  42 +
  43 + @Override
  44 + public List<DatabaseColumnDO> selectColumnList(Connection connection, String tableName) {
  45 + // 拼接 SQL
  46 + String sql = String.format("SELECT table_name, column_name, data_type, comments, column_id," +
  47 + " (CASE WHEN nullable = 'Y' THEN '1' ELSE '0' END) AS nullable," +
  48 + " (CASE WHEN constraint_type = 'P' THEN '1' ELSE '0' END) AS primary_key" +
  49 + " FROM" +
  50 + " (" +
  51 + " SELECT col.*, comments, constraint_type," +
  52 + " row_number ( ) over ( partition BY col.column_name ORDER BY constraint_type DESC ) AS row_flag" +
  53 + " FROM user_tab_columns col" +
  54 + " LEFT JOIN user_col_comments ON user_col_comments.table_name = col.table_name" +
  55 + " AND user_col_comments.column_name = col.column_name" +
  56 + " LEFT JOIN user_cons_columns ON user_cons_columns.table_name = col.table_name" +
  57 + " AND user_cons_columns.column_name = col.column_name" +
  58 + " LEFT JOIN user_constraints ON user_constraints.constraint_name = user_cons_columns.constraint_name" +
  59 + " WHERE col.table_name = '%s'" +
  60 + " )" +
  61 + "WHERE row_flag = 1", tableName);
  62 + // 执行并返回结果
  63 + return JdbcUtils.query(connection, sql, (rs, rowNum) -> DatabaseColumnDO.builder()
  64 + .tableName(rs.getString("table_name"))
  65 + .columnName(rs.getString("column_name"))
  66 + .dataType(rs.getString("data_type"))
  67 + .columnComment(rs.getString("comments"))
  68 + .nullable(rs.getBoolean("nullable"))
  69 + .primaryKey(rs.getBoolean("primary_key"))
  70 + .autoIncrement(false) // TODO 芋艿:oracle???
  71 + .ordinalPosition(rs.getInt("column_id"))
  72 + .build());
  73 + }
  74 +
  75 + @Override
  76 + public DbType getType() {
  77 + return DbType.ORACLE;
  78 + }
  79 +
  80 +}
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java
... ... @@ -101,8 +101,8 @@ public class CodegenServiceImpl implements CodegenService {
101 101 @Override
102 102 public Long createCodegen(Long userId, String tableName) {
103 103 // 从数据库中,获得数据库表结构
104   - DatabaseTableDO schemaTable = databaseTableService.getTable(0L, tableName);
105   - List<DatabaseColumnDO> schemaColumns = databaseTableService.getColumnList(0L, tableName);
  104 + DatabaseTableDO schemaTable = databaseTableService.getTable(9L, tableName);
  105 + List<DatabaseColumnDO> schemaColumns = databaseTableService.getColumnList(9L, tableName);
106 106 // 导入
107 107 return this.createCodegen0(userId, CodegenImportTypeEnum.DB, schemaTable, schemaColumns);
108 108 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DataSourceConfigServiceImpl.java
... ... @@ -13,7 +13,6 @@ import org.springframework.stereotype.Service;
13 13 import org.springframework.validation.annotation.Validated;
14 14  
15 15 import javax.annotation.Resource;
16   -
17 16 import java.util.List;
18 17 import java.util.Objects;
19 18  
... ... @@ -85,7 +84,10 @@ public class DataSourceConfigServiceImpl implements DataSourceConfigService {
85 84 }
86 85 // 从 DB 中读取
87 86 DataSourceConfigDO dataSourceConfig = dataSourceConfigMapper.selectById(id);
88   - dataSourceConfig.setPassword(stringEncryptor.decrypt(dataSourceConfig.getPassword()));
  87 + try {
  88 + dataSourceConfig.setPassword(stringEncryptor.decrypt(dataSourceConfig.getPassword()));
  89 + } catch (Exception ignore) { // 解码失败,则不解码
  90 + }
89 91 return dataSourceConfig;
90 92 }
91 93  
... ...