From 4d5e5ff78f44ee702000707928cabc14fce2a13c Mon Sep 17 00:00:00 2001 From: liweifan <402001231@qq.com> Date: Sun, 14 Aug 2022 23:09:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=95=B4=E5=90=88=E8=BE=BE=E6=A2=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/generate/GenerateConfig/index.vue | 1 + gen/pom.xml | 6 ++++++ .../main/java/com/gitee/gen/gen/DbType.java | 5 +++++ .../gitee/gen/gen/JavaColumnDefinition.java | 3 ++- .../com/gitee/gen/gen/SQLServiceFactory.java | 3 +++ .../com/gitee/gen/mapper/UpgradeMapper.java | 17 +++++++++++++++-- .../com/gitee/gen/service/UpgradeService.java | 19 +++++++++++++++---- .../main/resources/mybatis/UpgradeMapper.xml | 12 ++++++++++++ .../upgrade/ddl_generate_history_dm.txt | 7 +++++++ .../upgrade/ddl_template_group_dm.txt | 6 ++++++ 10 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 gen/src/main/resources/upgrade/ddl_generate_history_dm.txt create mode 100644 gen/src/main/resources/upgrade/ddl_template_group_dm.txt diff --git a/front/src/views/generate/GenerateConfig/index.vue b/front/src/views/generate/GenerateConfig/index.vue index 4889104..12a447a 100644 --- a/front/src/views/generate/GenerateConfig/index.vue +++ b/front/src/views/generate/GenerateConfig/index.vue @@ -231,6 +231,7 @@ const DB_TYPE = { Oracle: 2, SQL_Server: 3, PostgreSQL: 4, + Dm: 5 } export default { name: 'GenerateConfig', diff --git a/gen/pom.xml b/gen/pom.xml index 4997474..3171743 100644 --- a/gen/pom.xml +++ b/gen/pom.xml @@ -68,6 +68,12 @@ ojdbc6 12.1.0.1-atlassian-hosted + + + com.dm + DmJdbcDriver + 18 + com.alibaba fastjson diff --git a/gen/src/main/java/com/gitee/gen/gen/DbType.java b/gen/src/main/java/com/gitee/gen/gen/DbType.java index b02acf6..2310a69 100644 --- a/gen/src/main/java/com/gitee/gen/gen/DbType.java +++ b/gen/src/main/java/com/gitee/gen/gen/DbType.java @@ -25,6 +25,11 @@ public enum DbType { "org.postgresql.Driver", "jdbc:postgresql://%s:%s/%s"), + DM(5, + "DM", + "dm.jdbc.driver.DmDriver", + "jdbc:dm://%s:%s/%s"), + ; private final int type; private final String displayName; diff --git a/gen/src/main/java/com/gitee/gen/gen/JavaColumnDefinition.java b/gen/src/main/java/com/gitee/gen/gen/JavaColumnDefinition.java index 03fbacd..2851077 100644 --- a/gen/src/main/java/com/gitee/gen/gen/JavaColumnDefinition.java +++ b/gen/src/main/java/com/gitee/gen/gen/JavaColumnDefinition.java @@ -49,7 +49,8 @@ public class JavaColumnDefinition extends ColumnDefinition { * @return 返回java字段 */ public String getJavaFieldName() { - return FieldUtil.underlineFilter(getColumnName()); + String fieldName = FieldUtil.underlineFilter(getColumnName()); + return fieldName.replaceAll("_", ""); } /** diff --git a/gen/src/main/java/com/gitee/gen/gen/SQLServiceFactory.java b/gen/src/main/java/com/gitee/gen/gen/SQLServiceFactory.java index 5aceefe..dfb22d8 100644 --- a/gen/src/main/java/com/gitee/gen/gen/SQLServiceFactory.java +++ b/gen/src/main/java/com/gitee/gen/gen/SQLServiceFactory.java @@ -1,5 +1,6 @@ package com.gitee.gen.gen; +import com.gitee.gen.gen.dm.DmService; import com.gitee.gen.gen.mysql.MySqlService; import com.gitee.gen.gen.oracle.OracleService; import com.gitee.gen.gen.postgresql.PostgreSqlService; @@ -18,6 +19,8 @@ public class SQLServiceFactory { SERVICE_CONFIG.put(DbType.ORACLE.getType(), new OracleService()); SERVICE_CONFIG.put(DbType.SQL_SERVER.getType(), new SqlServerService()); SERVICE_CONFIG.put(DbType.POSTGRE_SQL.getType(), new PostgreSqlService()); + SERVICE_CONFIG.put(DbType.DM.getType(), new DmService()); + } public static SQLService build(GeneratorConfig generatorConfig) { diff --git a/gen/src/main/java/com/gitee/gen/mapper/UpgradeMapper.java b/gen/src/main/java/com/gitee/gen/mapper/UpgradeMapper.java index 6707d0f..728ed13 100644 --- a/gen/src/main/java/com/gitee/gen/mapper/UpgradeMapper.java +++ b/gen/src/main/java/com/gitee/gen/mapper/UpgradeMapper.java @@ -21,7 +21,13 @@ public interface UpgradeMapper { * @param type 类型 */ void addColumn(@Param("tableName") String tableName, @Param("columnName")String columnName,@Param("type") String type); - + /** + * 新增dm表字段 + * @param tableName 表名 + * @param columnName 字段名 + * @param type 类型 + */ + void addColumnDm(@Param("tableName") String tableName, @Param("columnName")String columnName,@Param("type") String type); /** * 新增mysql表字段 * @param tableName 表名 @@ -36,7 +42,12 @@ public interface UpgradeMapper { * @return 返回字段信息 */ List listColumnInfo(@Param("tableName") String tableName); - + /** + * 查看DM表字段信息 + * @param tableName 表名 + * @return 返回字段信息 + */ + List listColumnInfoDm(@Param("tableName") String tableName); /** * 查看MYSQL表字段信息 * @param tableName 表名 @@ -46,5 +57,7 @@ public interface UpgradeMapper { List listTableName(); + List listTableNameDm(); + List listTableNameMysql(); } diff --git a/gen/src/main/java/com/gitee/gen/service/UpgradeService.java b/gen/src/main/java/com/gitee/gen/service/UpgradeService.java index 9327d69..142f7da 100644 --- a/gen/src/main/java/com/gitee/gen/service/UpgradeService.java +++ b/gen/src/main/java/com/gitee/gen/service/UpgradeService.java @@ -113,6 +113,8 @@ public class UpgradeService { if (!isColumnExist(tableName, columnName)) { if (isMysql()) { upgradeMapper.addColumnMysql(tableName, columnName, type); + } else if(isDm()){ + upgradeMapper.addColumnDm(tableName, columnName, type); } else { upgradeMapper.addColumn(tableName, columnName, type); } @@ -136,9 +138,11 @@ public class UpgradeService { } private String loadDDL(String tableName) { + String tmp_dm = "ddl_%s_dm.txt"; String tmp_mysql = "ddl_%s_mysql.txt"; String tmp_sqlite = "ddl_%s_sqlite.txt"; - String tmp = isMysql() ? tmp_mysql : tmp_sqlite; + String tmp = isDm() ? tmp_dm : (isMysql() ? tmp_mysql : tmp_sqlite); + String filename = "upgrade/" + String.format(tmp, tableName); ClassPathResource resource = new ClassPathResource(filename); if (!resource.exists()) { @@ -160,8 +164,8 @@ public class UpgradeService { * @return true:存在 */ public boolean isColumnExist(String tableName, String columnName) { - List columnInfoList = isMysql() ? upgradeMapper.listColumnInfoMysql(tableName, dbName) : - upgradeMapper.listColumnInfo(tableName); + List columnInfoList = isDm() ? upgradeMapper.listColumnInfoDm(tableName) : + ( isMysql() ? upgradeMapper.listColumnInfoMysql(tableName, dbName) : upgradeMapper.listColumnInfo(tableName) ); return columnInfoList .stream() .anyMatch(columnInfo -> Objects.equals(columnInfo.getName(), columnName)); @@ -176,7 +180,9 @@ public class UpgradeService { List tableNameList; if (isMysql()) { tableNameList = upgradeMapper.listTableNameMysql(); - } else { + } else if(isDm()){ + tableNameList = upgradeMapper.listTableNameDm(); + }else { tableNameList = upgradeMapper.listTableName(); } return tableNameList != null && tableNameList.contains(tableName); @@ -185,4 +191,9 @@ public class UpgradeService { private boolean isMysql() { return this.driverClassName.contains("mysql"); } + + private boolean isDm() { + return this.driverClassName.contains("dm"); + } + } diff --git a/gen/src/main/resources/mybatis/UpgradeMapper.xml b/gen/src/main/resources/mybatis/UpgradeMapper.xml index 5f2e0bc..2a7d9f5 100644 --- a/gen/src/main/resources/mybatis/UpgradeMapper.xml +++ b/gen/src/main/resources/mybatis/UpgradeMapper.xml @@ -10,6 +10,10 @@ ALTER TABLE ${tableName} ADD ${columnName} ${type} + + alter table ${tableName} add column(${columnName} ${type}); + + ALTER TABLE ${tableName} ADD COLUMN ${columnName} ${type} @@ -18,6 +22,10 @@ PRAGMA table_info('${tableName}') + + + + diff --git a/gen/src/main/resources/upgrade/ddl_generate_history_dm.txt b/gen/src/main/resources/upgrade/ddl_generate_history_dm.txt new file mode 100644 index 0000000..ddb1147 --- /dev/null +++ b/gen/src/main/resources/upgrade/ddl_generate_history_dm.txt @@ -0,0 +1,7 @@ +CREATE TABLE "GEN"."GENERATE_HISTORY" +( +"ID" INT IDENTITY(10, 1) NOT NULL, +"CONFIG_CONTENT" TEXT, +"MD5_VALUE" VARCHAR(64), +"GENERATE_TIME" TIMESTAMP(0) NOT NULL, +NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) \ No newline at end of file diff --git a/gen/src/main/resources/upgrade/ddl_template_group_dm.txt b/gen/src/main/resources/upgrade/ddl_template_group_dm.txt new file mode 100644 index 0000000..2f69c33 --- /dev/null +++ b/gen/src/main/resources/upgrade/ddl_template_group_dm.txt @@ -0,0 +1,6 @@ +CREATE TABLE "GEN"."TEMPLATE_GROUP" +( +"ID" BIGINT IDENTITY(1, 1) NOT NULL, +"GROUP_NAME" VARCHAR(100), +"IS_DELETED" INT DEFAULT 0, +NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) \ No newline at end of file -- Gitee From be621726f370476a00630dac1c8a849a5d4ac679 Mon Sep 17 00:00:00 2001 From: liweifan <402001231@qq.com> Date: Tue, 16 Aug 2022 15:04:23 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=95=B4=E5=90=88=E8=BE=BE=E6=A2=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/gen/gen/dm/DmColumnSelector.java | 90 +++++++++++++++++++ .../java/com/gitee/gen/gen/dm/DmService.java | 14 +++ .../com/gitee/gen/gen/dm/DmTableSelector.java | 54 +++++++++++ .../com/gitee/gen/gen/dm/DmTypeFormatter.java | 77 ++++++++++++++++ 4 files changed, 235 insertions(+) create mode 100644 gen/src/main/java/com/gitee/gen/gen/dm/DmColumnSelector.java create mode 100644 gen/src/main/java/com/gitee/gen/gen/dm/DmService.java create mode 100644 gen/src/main/java/com/gitee/gen/gen/dm/DmTableSelector.java create mode 100644 gen/src/main/java/com/gitee/gen/gen/dm/DmTypeFormatter.java diff --git a/gen/src/main/java/com/gitee/gen/gen/dm/DmColumnSelector.java b/gen/src/main/java/com/gitee/gen/gen/dm/DmColumnSelector.java new file mode 100644 index 0000000..fa67450 --- /dev/null +++ b/gen/src/main/java/com/gitee/gen/gen/dm/DmColumnSelector.java @@ -0,0 +1,90 @@ +package com.gitee.gen.gen.dm; + +import com.gitee.gen.gen.ColumnDefinition; +import com.gitee.gen.gen.ColumnSelector; +import com.gitee.gen.gen.GeneratorConfig; +import com.gitee.gen.gen.TypeFormatter; +import com.gitee.gen.gen.oracle.OracleTypeFormatter; +import com.gitee.gen.util.FieldUtil; +import org.apache.commons.lang.StringUtils; + +import java.util.Map; +import java.util.Set; + +/** + * dm表信息查询 + * + */ +public class DmColumnSelector extends ColumnSelector { + + private static final TypeFormatter TYPE_FORMATTER = new OracleTypeFormatter(); + + private static final String COLUMN_SQL = " SELECT " + + " atc.COLUMN_NAME FIELD, atc.DATA_TYPE TYPE, atc.DATA_SCALE SCALE, atc.DATA_LENGTH MAXLENGTH, " + + " CASE atc.NULLABLE WHEN 'N' THEN '否' ELSE '是' END 可空, " + + " atc.DATA_DEFAULT 默认值, acc.COMMENTS COMMENTS, atc.TABLE_NAME 表名, " + + " CASE atc.COLUMN_NAME " + + " WHEN " + + " ( SELECT col.column_name FROM user_constraints con " + + " LEFT JOIN user_cons_columns col ON con.table_name = col.table_name " + + " AND con.OWNER = col.OWNER AND con.CONSTRAINT_NAME = col.CONSTRAINT_NAME " + + " WHERE con.constraint_type = 'P' " + + " AND col.table_name = '%s' ) " + + " THEN 'true' ELSE 'false' END AS KEY " + + " FROM USER_TAB_COLUMNS atc " + + " LEFT JOIN USER_COL_COMMENTS acc " + + " ON acc.TABLE_NAME = atc.TABLE_NAME AND acc.COLUMN_NAME = atc.COLUMN_NAME " + + " WHERE atc.TABLE_NAME = '%s' " + + " ORDER BY atc.COLUMN_ID "; + + public DmColumnSelector(GeneratorConfig generatorConfig) { + super(generatorConfig); + } + + @Override + protected String getColumnInfoSQL(String tableName) { + return String.format(COLUMN_SQL, tableName, tableName); + } + + @Override + protected ColumnDefinition buildColumnDefinition(Map rowMap){ + Set columnSet = rowMap.keySet(); + + for (String columnInfo : columnSet) { + rowMap.put(columnInfo.toUpperCase(), rowMap.get(columnInfo)); + } + + ColumnDefinition columnDefinition = new ColumnDefinition(); + + columnDefinition.setColumnName(FieldUtil.convertString(rowMap.get("FIELD"))); + + columnDefinition.setIsIdentity(false); + + boolean isPk = "true".equalsIgnoreCase(FieldUtil.convertString(rowMap.get("KEY"))); + columnDefinition.setIsPk(isPk); + + String type = FieldUtil.convertString(rowMap.get("TYPE")); + // 如果是number + if (StringUtils.containsIgnoreCase(type, "number")) { + // 有精度则为decimal,否则是int + Object scaleCol = rowMap.get("SCALE"); + if (scaleCol == null) { + scaleCol = 0; + } + String scale = String.valueOf(scaleCol); + type = "0".equals(scale) ? "int" : "decimal"; + } + columnDefinition.setType(TYPE_FORMATTER.format(type)); + + columnDefinition.setComment(FieldUtil.convertString(rowMap.get("COMMENTS"))); + + String maxLength = FieldUtil.convertString(rowMap.get("MAXLENGTH")); + columnDefinition.setMaxLength(new Integer(StringUtils.isEmpty(maxLength) ? "0" : maxLength)); + + String scale = FieldUtil.convertString(rowMap.get("SCALE")); + columnDefinition.setScale(new Integer(StringUtils.isEmpty(scale) ? "0" : scale)); + + return columnDefinition; + } + +} \ No newline at end of file diff --git a/gen/src/main/java/com/gitee/gen/gen/dm/DmService.java b/gen/src/main/java/com/gitee/gen/gen/dm/DmService.java new file mode 100644 index 0000000..9cf0471 --- /dev/null +++ b/gen/src/main/java/com/gitee/gen/gen/dm/DmService.java @@ -0,0 +1,14 @@ +package com.gitee.gen.gen.dm; + +import com.gitee.gen.gen.GeneratorConfig; +import com.gitee.gen.gen.SQLService; +import com.gitee.gen.gen.TableSelector; + +public class DmService implements SQLService { + + @Override + public TableSelector getTableSelector(GeneratorConfig generatorConfig) { + return new DmTableSelector(new DmColumnSelector(generatorConfig), generatorConfig); + } + +} diff --git a/gen/src/main/java/com/gitee/gen/gen/dm/DmTableSelector.java b/gen/src/main/java/com/gitee/gen/gen/dm/DmTableSelector.java new file mode 100644 index 0000000..b4940ca --- /dev/null +++ b/gen/src/main/java/com/gitee/gen/gen/dm/DmTableSelector.java @@ -0,0 +1,54 @@ +package com.gitee.gen.gen.dm; + +import com.gitee.gen.gen.ColumnSelector; +import com.gitee.gen.gen.GeneratorConfig; +import com.gitee.gen.gen.TableDefinition; +import com.gitee.gen.gen.TableSelector; + +import java.util.Map; + +import static com.gitee.gen.util.FieldUtil.convertString; + +/** + * 查询mysql数据库表 + */ +public class DmTableSelector extends TableSelector { + + public DmTableSelector(ColumnSelector columnSelector, + GeneratorConfig dataBaseConfig) { + super(columnSelector, dataBaseConfig); + } + + /** + * SELECT a.TABLE_NAME,b.COMMENTS + * FROM ALL_TABLES a,USER_TAB_COMMENTS b + * WHERE a.TABLE_NAME=b.TABLE_NAME + * AND a.OWNER='SYSTEM' + * @param generatorConfig generatorConfig + * @return + */ + @Override + protected String getShowTablesSQL(GeneratorConfig generatorConfig) { + String owner = generatorConfig.getSchemaName().toUpperCase(); + StringBuilder sb = new StringBuilder(""); + sb.append("SELECT a.TABLE_NAME AS NAME,b.COMMENTS FROM USER_TABLES a left join USER_TAB_COMMENTS b on a.TABLE_NAME = b.TABLE_NAME "); + sb.append(" WHERE 1=1 "); + if(this.getSchTableNames() != null && this.getSchTableNames().size() > 0) { + StringBuilder tables = new StringBuilder(); + for (String table : this.getSchTableNames()) { + tables.append(",'").append(table).append("'"); + } + sb.append(" AND a.TABLE_NAME IN (" + tables.substring(1) + ")"); + } + return sb.toString(); + } + + @Override + protected TableDefinition buildTableDefinition(Map tableMap) { + TableDefinition tableDefinition = new TableDefinition(); + tableDefinition.setTableName(convertString(tableMap.get("NAME"))); + tableDefinition.setComment(convertString(tableMap.get("COMMENTS"))); + return tableDefinition; + } + +} diff --git a/gen/src/main/java/com/gitee/gen/gen/dm/DmTypeFormatter.java b/gen/src/main/java/com/gitee/gen/gen/dm/DmTypeFormatter.java new file mode 100644 index 0000000..e35163f --- /dev/null +++ b/gen/src/main/java/com/gitee/gen/gen/dm/DmTypeFormatter.java @@ -0,0 +1,77 @@ +package com.gitee.gen.gen.dm; + +import com.gitee.gen.gen.TypeFormatter; + +import java.util.Arrays; +import java.util.Collections; + +/** + * @author tanghc + */ +public class DmTypeFormatter implements TypeFormatter { + + @Override + public boolean isBit(String columnType) { + return contains(Collections.singletonList("bit"), columnType); + } + + @Override + public boolean isBoolean(String columnType) { + return contains(Collections.singletonList("boolean"), columnType); + } + + @Override + public boolean isTinyint(String columnType) { + return contains(Collections.singletonList("tinyint"), columnType); + } + + @Override + public boolean isSmallint(String columnType) { + return false; + } + + @Override + public boolean isInt(String columnType) { + return contains(Arrays.asList("int", "integer"), columnType); + } + + @Override + public boolean isLong(String columnType) { + return !isVarchar(columnType) && contains(Collections.singletonList("long"), columnType); + } + + @Override + public boolean isFloat(String columnType) { + return contains(Collections.singletonList("float"), columnType); + } + + @Override + public boolean isDouble(String columnType) { + return contains(Collections.singletonList("double"), columnType); + } + + @Override + public boolean isDecimal(String columnType) { + return contains(Collections.singletonList("decimal"), columnType); + } + + @Override + public boolean isVarchar(String columnType) { + return contains(Arrays.asList("CHAR", "VARCHAR", "VARCHAR2", "NVARCHAR2", "TEXT", "NCHAR"), columnType); + } + + @Override + public boolean isDatetime(String columnType) { + return contains(Arrays.asList("DATE", "TIME", "DATETIME", "TIMESTAMP"), columnType); + } + + @Override + public boolean isBlob(String columnType) { + return contains(Collections.singletonList("blob"), columnType); + } + + @Override + public boolean isJsonb(String columnType) { + return false; + } +} -- Gitee