Commit f1069aa3062fcc580c715f4df729c58e5cd92a1f
1 parent
3e869a07
增加 PostgreSQL 的代码生成支持
Showing
3 changed files
with
105 additions
and
1 deletions
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/db/DatabaseTablePostgreSQLDAOImpl.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} 的 PostgreSQL 实现类 | ||
| 15 | + * | ||
| 16 | + * @author 芋道源码 | ||
| 17 | + */ | ||
| 18 | +@Repository | ||
| 19 | +public class DatabaseTablePostgreSQLDAOImpl implements DatabaseTableDAO { | ||
| 20 | + | ||
| 21 | + @Override | ||
| 22 | + public List<DatabaseTableDO> selectTableList(Connection connection, String tableNameLike, String tableCommentLike) { | ||
| 23 | + // 拼接 SQL | ||
| 24 | + String sql = "SELECT tbl.tablename, obj_description(c.oid)" + | ||
| 25 | + " FROM pg_tables tbl, pg_class c" + | ||
| 26 | + " WHERE tbl.schemaname = CURRENT_SCHEMA()" + | ||
| 27 | + " AND tbl.tablename = c.relname"; | ||
| 28 | + if (StrUtil.isNotEmpty(tableNameLike)) { | ||
| 29 | + sql += StrUtil.format(" AND tbl.tablename LIKE '%{}%'", tableNameLike); | ||
| 30 | + } | ||
| 31 | + if (StrUtil.isNotEmpty(tableCommentLike)) { | ||
| 32 | + sql += StrUtil.format(" AND obj_description(c.oid) LIKE '%{}%'", tableCommentLike); | ||
| 33 | + } | ||
| 34 | + // 执行并返回结果 | ||
| 35 | + return JdbcUtils.query(connection, sql, (rs, rowNum) -> DatabaseTableDO.builder() | ||
| 36 | + .tableName(rs.getString("tablename")) | ||
| 37 | + .tableComment(rs.getString("obj_description")) | ||
| 38 | + .build()); | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @Override | ||
| 42 | + public List<DatabaseColumnDO> selectColumnList(Connection connection, String tableName) { | ||
| 43 | + // 拼接 SQL | ||
| 44 | + String sql = "SELECT table_name, column_name, data_type, column_comment, ordinal_position," + | ||
| 45 | + " (CASE WHEN is_nullable = 'yes' THEN '1' ELSE '0' END) AS nullable," + | ||
| 46 | + " (CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END) AS primary_key," + | ||
| 47 | + " (CASE WHEN extra = 'auto_increment' THEN '1' ELSE '0' END) AS auto_increment" + | ||
| 48 | + " FROM information_schema.COLUMNS" + | ||
| 49 | + " WHERE table_schema = (SELECT DATABASE())" + | ||
| 50 | + String.format(" AND table_name = '%s'", tableName); | ||
| 51 | + // 执行并返回结果 | ||
| 52 | + return JdbcUtils.query(connection, sql, (rs, rowNum) -> DatabaseColumnDO.builder() | ||
| 53 | + .tableName(rs.getString("table_name")) | ||
| 54 | + .columnName(rs.getString("column_name")) | ||
| 55 | + .dataType(rs.getString("data_type")) | ||
| 56 | + .columnComment(rs.getString("column_comment")) | ||
| 57 | + .nullable(rs.getBoolean("nullable")) | ||
| 58 | + .primaryKey(rs.getBoolean("primary_key")) | ||
| 59 | + .autoIncrement(rs.getBoolean("auto_increment")) | ||
| 60 | + .ordinalPosition(rs.getInt("ordinal_position")) | ||
| 61 | + .build()); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + @Override | ||
| 65 | + public DbType getType() { | ||
| 66 | + return DbType.MYSQL; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | +} |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableService.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.infra.service.db; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.infra.service.db; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseColumnDO; | 3 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseColumnDO; |
| 4 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseTableDO; | 4 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseTableDO; |
| 5 | +import com.baomidou.mybatisplus.generator.config.po.TableInfo; | ||
| 5 | 6 | ||
| 6 | import java.util.List; | 7 | import java.util.List; |
| 7 | 8 | ||
| @@ -40,4 +41,24 @@ public interface DatabaseTableService { | @@ -40,4 +41,24 @@ public interface DatabaseTableService { | ||
| 40 | */ | 41 | */ |
| 41 | List<DatabaseColumnDO> getColumnList(Long dataSourceConfigId, String tableName); | 42 | List<DatabaseColumnDO> getColumnList(Long dataSourceConfigId, String tableName); |
| 42 | 43 | ||
| 44 | + | ||
| 45 | + /** | ||
| 46 | + * 获得表列表,基于表名称 + 表描述进行模糊匹配 | ||
| 47 | + * | ||
| 48 | + * @param dataSourceConfigId 数据源配置的编号 | ||
| 49 | + * @param tableNameLike 表名称,模糊匹配 | ||
| 50 | + * @param tableCommentLike 表描述,模糊匹配 | ||
| 51 | + * @return 表列表 | ||
| 52 | + */ | ||
| 53 | + List<TableInfo> getTableList2(Long dataSourceConfigId, String tableNameLike, String tableCommentLike); | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 获得指定表名 | ||
| 57 | + * | ||
| 58 | + * @param dataSourceConfigId 数据源配置的编号 | ||
| 59 | + * @param tableName 表名称 | ||
| 60 | + * @return 表 | ||
| 61 | + */ | ||
| 62 | + TableInfo getTable2(Long dataSourceConfigId, String tableName); | ||
| 63 | + | ||
| 43 | } | 64 | } |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java
| @@ -8,11 +8,13 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseColumnDO; | @@ -8,11 +8,13 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseColumnDO; | ||
| 8 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseTableDO; | 8 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DatabaseTableDO; |
| 9 | import cn.iocoder.yudao.module.infra.dal.mysql.db.DatabaseTableDAO; | 9 | import cn.iocoder.yudao.module.infra.dal.mysql.db.DatabaseTableDAO; |
| 10 | import com.baomidou.mybatisplus.annotation.DbType; | 10 | import com.baomidou.mybatisplus.annotation.DbType; |
| 11 | +import com.baomidou.mybatisplus.generator.config.po.TableInfo; | ||
| 11 | import lombok.SneakyThrows; | 12 | import lombok.SneakyThrows; |
| 12 | import org.springframework.stereotype.Service; | 13 | import org.springframework.stereotype.Service; |
| 13 | 14 | ||
| 14 | import javax.annotation.Resource; | 15 | import javax.annotation.Resource; |
| 15 | import java.sql.Connection; | 16 | import java.sql.Connection; |
| 17 | +import java.util.Comparator; | ||
| 16 | import java.util.List; | 18 | import java.util.List; |
| 17 | 19 | ||
| 18 | /** | 20 | /** |
| @@ -49,10 +51,22 @@ public class DatabaseTableServiceImpl implements DatabaseTableService { | @@ -49,10 +51,22 @@ public class DatabaseTableServiceImpl implements DatabaseTableService { | ||
| 49 | @SneakyThrows | 51 | @SneakyThrows |
| 50 | public List<DatabaseColumnDO> getColumnList(Long dataSourceConfigId, String tableName) { | 52 | public List<DatabaseColumnDO> getColumnList(Long dataSourceConfigId, String tableName) { |
| 51 | try (Connection connection = getConnection(dataSourceConfigId)) { | 53 | try (Connection connection = getConnection(dataSourceConfigId)) { |
| 52 | - return getDatabaseTableDAO(dataSourceConfigId).selectColumnList(connection, tableName); | 54 | + List<DatabaseColumnDO> columns = getDatabaseTableDAO(dataSourceConfigId).selectColumnList(connection, tableName); |
| 55 | + columns.sort(Comparator.comparing(DatabaseColumnDO::getOrdinalPosition)); | ||
| 56 | + return columns; | ||
| 53 | } | 57 | } |
| 54 | } | 58 | } |
| 55 | 59 | ||
| 60 | + @Override | ||
| 61 | + public List<TableInfo> getTableList2(Long dataSourceConfigId, String tableNameLike, String tableCommentLike) { | ||
| 62 | + return null; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @Override | ||
| 66 | + public TableInfo getTable2(Long dataSourceConfigId, String tableName) { | ||
| 67 | + return null; | ||
| 68 | + } | ||
| 69 | + | ||
| 56 | private Connection getConnection(Long dataSourceConfigId) { | 70 | private Connection getConnection(Long dataSourceConfigId) { |
| 57 | DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId); | 71 | DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId); |
| 58 | Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId); | 72 | Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId); |