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