diff --git a/front/src/views/generate/GenerateConfig/index.vue b/front/src/views/generate/GenerateConfig/index.vue index 48891040d141fd6889babb0a8d670ba1051f33fc..12a447aa0d6343ee1e4fb2e9cc804c1faf163ade 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 4997474e0e27e2111ebcbb93a1879735d1b03be3..317174314171a1f5036cab70b70baac667cd4b92 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 b02acf6e3c220f46663d46873292c79d53413ba2..2310a699e79f69768c14d410fea01cf84d3276ff 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 03fbacdaf4bc0fdd0cd3b9b3b472424f98a776a8..28510777f41c74c843850ae9db6452ceb1a40b24 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 5aceefe211b14a603e98f0e2cc85a844769a1e4b..dfb22d8dd63bef2b9bacc0a3eb67fae2f06c3aad 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/gen/dm/DmColumnSelector.java b/gen/src/main/java/com/gitee/gen/gen/dm/DmColumnSelector.java new file mode 100644 index 0000000000000000000000000000000000000000..fa67450a9fd54765f522c2df7e780c79b838b350 --- /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 0000000000000000000000000000000000000000..9cf04718ff44406c8161b10cdd6f571427a4a70c --- /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 0000000000000000000000000000000000000000..b4940ca911510010de8a6fbd4a1ea6b72fa89d6b --- /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 0000000000000000000000000000000000000000..e35163f9104e6b2bd467812c48f3234064e00889 --- /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; + } +} 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 6707d0f967d1d68b6452eca7c4cd7a45ca9371bf..728ed13697d790499edcd075620aa23d4395a812 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 9327d697b07f4549600baf0d1cb39065e5d298aa..142f7da3bd60d528bb5a88649e413acf6fa52fec 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 5f2e0bc0534e021ad41c57b9c85e9497f0cdeee0..2a7d9f5647db3eb591b681bf397fc8b6ae82ae92 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 0000000000000000000000000000000000000000..ddb1147a4695766f1e9b892bfb71cfa69ae33dfa --- /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 0000000000000000000000000000000000000000..2f69c33160cd8acd6edf991818c4811693b9df86 --- /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