Commit 6b68aa95fecd3c2eebe351b16703712fa7c5562e
1 parent
3950c58c
增加 DatabaseTableOracleDAOImpl 实现
Showing
5 changed files
with
92 additions
and
6 deletions
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/db/DatabaseColumnDO.java
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 | ... | ... |