Skip to content

Commit 9c4db98

Browse files
authored
Merge pull request #1306 from halower/3.0
MP代码生成器添加达梦数据库生成支持
2 parents ba464b9 + a1146fd commit 9c4db98

File tree

9 files changed

+369
-2
lines changed

9 files changed

+369
-2
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ ext {
6666
"sqlserver" : "com.microsoft.sqlserver:sqljdbc4:4.0",
6767
"postgresql" : "org.postgresql:postgresql:9.4.1212",
6868
"oracle" : fileTree(dir: 'libs', includes: ['ojdbc-11.2.0.3-jdk16.jar']),
69+
"dm" : fileTree(dir: 'libs', includes: ["jdbcDriver-18.jar"]),
6970
"h2" : "com.h2database:h2:1.4.197",
7071
"mysql" : "mysql:mysql-connector-java:8.0.15",
7172
"sqlite" : "org.xerial:sqlite-jdbc:3.27.2.1",

libs/jdbcDriver-18.jar

1.34 MB
Binary file not shown.

mybatis-plus-generator/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ dependencies {
88
testCompile "${lib.sqlserver}"
99
testCompile "${lib.postgresql}"
1010
testCompile lib.oracle as ConfigurableFileTree
11+
testCompile lib.dm as ConfigurableFileTree
1112
testCompile "${lib.h2}"
1213
testCompile "${lib.mysql}"
1314
testCompile "${lib.sqlite}"

mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/DataSourceConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ public IDbQuery getDbQuery() {
9393
case SQLITE:
9494
dbQuery = new SqliteQuery();
9595
break;
96+
case DM:
97+
dbQuery = new DMQuery();
98+
break;
9699
default:
97100
// 默认 MYSQL
98101
dbQuery = new MySqlQuery();
@@ -167,6 +170,9 @@ public ITypeConvert getTypeConvert() {
167170
case SQLITE:
168171
typeConvert = new SqliteTypeConvert();
169172
break;
173+
case DM:
174+
typeConvert = new DmTypeConvert();
175+
break;
170176
case MARIADB:
171177
typeConvert = new MySqlTypeConvert();
172178
break;

mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,11 @@ private TableInfo convertTableFields(TableInfo tableInfo, StrategyConfig config)
556556
} else if (DbType.ORACLE == dbType) {
557557
tableName = tableName.toUpperCase();
558558
tableFieldsSql = String.format(tableFieldsSql.replace("#schema", dataSourceConfig.getSchemaName()), tableName);
559-
} else if (DbType.H2 == dbType) {
559+
} else if (DbType.DM == dbType) {
560+
tableName = tableName.toUpperCase();
561+
tableFieldsSql = String.format(tableFieldsSql, tableName);
562+
}
563+
else if (DbType.H2 == dbType) {
560564
tableName = tableName.toUpperCase();
561565
try (PreparedStatement pkQueryStmt = connection.prepareStatement(String.format(H2Query.PK_QUERY_SQL, tableName));
562566
ResultSet pkResults = pkQueryStmt.executeQuery()) {

mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/converts/DB2TypeConvert.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
* @author zhanyao
2727
* @since 2018-05-16
2828
*/
29-
public class DB2TypeConvert implements ITypeConvert {
29+
public class DB2TypeConvert implements ITypeConvert {
3030

3131
@Override
3232
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
/*
2+
* Copyright (c) 2011-2020, baomidou ([email protected]).
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
5+
* use this file except in compliance with the License. You may obtain a copy of
6+
* the License at
7+
* <p>
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
* <p>
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations under
14+
* the License.
15+
*/
16+
package com.baomidou.mybatisplus.generator.config.converts;
17+
18+
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
19+
import com.baomidou.mybatisplus.generator.config.ITypeConvert;
20+
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
21+
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
22+
23+
/**
24+
* DM 字段类型转换
25+
*
26+
* @author halower
27+
* @since 2019-06-27
28+
*/
29+
public class DmTypeConvert implements ITypeConvert {
30+
31+
@Override
32+
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
33+
String t = fieldType.toLowerCase();
34+
DbColumnType dbColumnType = new BasicDataTypeHandler().getDbColumnType(t);
35+
return dbColumnType;
36+
}
37+
38+
interface Handler {
39+
DbColumnType getDbColumnType(String fieldType);
40+
}
41+
42+
/**
43+
* 常规数据类型
44+
*/
45+
class BasicDataTypeHandler implements Handler {
46+
@Override
47+
public DbColumnType getDbColumnType(String fieldType) {
48+
//字符数据类型: CHAR,CHARACTER,VARCHAR
49+
if(fieldType.contains("char")) {
50+
return DbColumnType.STRING;
51+
}
52+
/**
53+
* 数值数据类型:
54+
* NUMERIC,DECIMAL,DEC,MONEY,BIT,BOOL,BOOLEAN,INTEGER,INT,BIGINT
55+
* TINYINT,BYTE,SMALLINT,BINARY,VARBINARY
56+
*/
57+
else if (fieldType.contains("numeric")
58+
|| fieldType.contains("decimal")
59+
|| fieldType.contains("dec")
60+
|| fieldType.contains("money")) {
61+
return DbColumnType.BIG_DECIMAL;
62+
}
63+
else if(fieldType.contains("bit")
64+
|| fieldType.contains("bool")
65+
|| fieldType.contains("boolean")){
66+
return DbColumnType.BOOLEAN;
67+
}
68+
else if(fieldType.contains("integer") || fieldType.contains("int")){
69+
return DbColumnType.INTEGER;
70+
}
71+
else if(fieldType.contains("bigint") ){
72+
return DbColumnType.BIG_INTEGER;
73+
}
74+
else if(fieldType.contains("tinyint")
75+
|| fieldType.contains("byte")
76+
|| fieldType.contains("smallint")
77+
){
78+
return DbColumnType.INTEGER;
79+
}
80+
else if (fieldType.contains("binary")
81+
|| fieldType.contains("varbinary")
82+
) {
83+
return DbColumnType.BYTE_ARRAY;
84+
}
85+
/**
86+
* 近似数值数据类型:
87+
* FLOAT
88+
*/
89+
else if (fieldType.contains("float")) {
90+
return DbColumnType.FLOAT;
91+
}
92+
/**
93+
* DOUBLE, DOUBLE PRECISION,REAL
94+
*/
95+
else if (fieldType.contains("double") || fieldType.contains("real")) {
96+
return DbColumnType.DOUBLE;
97+
}
98+
return new DateTimeDataTypeHandler().getDbColumnType(fieldType);
99+
}
100+
}
101+
102+
/**
103+
* 日期时间数据类型
104+
*/
105+
class DateTimeDataTypeHandler implements Handler{
106+
107+
@Override
108+
public DbColumnType getDbColumnType(String fieldType) {
109+
if (fieldType.contains("date")
110+
|| fieldType.contains("time")
111+
|| fieldType.contains("timestamp")) {
112+
return DbColumnType.DATE;
113+
}
114+
return new MultimediaDataTypeHandler().getDbColumnType(fieldType);
115+
}
116+
}
117+
118+
/**
119+
* 多媒体数据类型
120+
* TEXT,LONGVARCHAR,CLOB,BLOB,IMAGE
121+
*/
122+
123+
class MultimediaDataTypeHandler implements Handler{
124+
@Override
125+
public DbColumnType getDbColumnType(String fieldType) {
126+
if (fieldType.contains("text")|| fieldType.contains("longvarchar")) {
127+
return DbColumnType.STRING;
128+
} else if (fieldType.contains("clob")) {
129+
return DbColumnType.CLOB;
130+
} else if (fieldType.contains("blob")) {
131+
return DbColumnType.BLOB;
132+
} else if (fieldType.contains("image")) {
133+
return DbColumnType.BYTE_ARRAY;
134+
}
135+
return DbColumnType.STRING;
136+
}
137+
}
138+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.baomidou.mybatisplus.generator.config.querys;
2+
3+
import com.baomidou.mybatisplus.annotation.DbType;
4+
5+
/**
6+
* DM 表数据查询
7+
*
8+
* @author halower
9+
* @since 2019-06-27
10+
*/
11+
public class DMQuery extends AbstractDbQuery{
12+
@Override
13+
public DbType dbType() {
14+
return DbType.DM;
15+
}
16+
17+
@Override
18+
public String tablesSql() {
19+
return "SELECT DISTINCT T1.TABLE_NAME,T2.COMMENTS AS TABLE_COMMENT FROM USER_TAB_COLUMNS T1 " +
20+
"INNER JOIN USER_TAB_COMMENTS T2 ON T1.TABLE_NAME = T2.TABLE_NAME";
21+
}
22+
23+
@Override
24+
public String tableFieldsSql() {
25+
return
26+
"SELECT T2.COLUMN_NAME,T1.COMMENTS,T2.DATA_TYPE," +
27+
"CASE WHEN CONSTRAINT_TYPE='P' THEN 'PRI' END AS KEY " +
28+
"FROM USER_COL_COMMENTS T1,USER_TAB_COLUMNS T2," +
29+
"( SELECT T4.TABLE_NAME ,T4.COLUMN_NAME,T5.CONSTRAINT_TYPE " +
30+
" FROM USER_CONS_COLUMNS T4,USER_CONSTRAINTS T5 " +
31+
"WHERE T4.CONSTRAINT_NAME = T5.CONSTRAINT_NAME AND T5.CONSTRAINT_TYPE = 'P') T3 " +
32+
"WHERE T1.TABLE_NAME = T2.TABLE_NAME AND "+
33+
"T1.COLUMN_NAME=T2.COLUMN_NAME AND "+
34+
"T1.COLUMN_NAME=T2.COLUMN_NAME AND "+
35+
"T1.TABLE_NAME=T3.TABLE_NAME AND "+
36+
"T1.COLUMN_NAME=T3.COLUMN_NAME AND "+
37+
"T1.TABLE_NAME = '%s'";
38+
}
39+
40+
@Override
41+
public String tableName() {
42+
return "TABLE_NAME";
43+
}
44+
@Override
45+
public String tableComment() {
46+
return "TABLE_COMMENT";
47+
}
48+
49+
@Override
50+
public String fieldName() {
51+
return "COLUMN_NAME";
52+
}
53+
54+
@Override
55+
public String fieldType() {
56+
return "DATA_TYPE";
57+
}
58+
59+
@Override
60+
public String fieldComment() {
61+
return "COMMENTS";
62+
}
63+
64+
@Override
65+
public String fieldKey() {
66+
return "KEY";
67+
}
68+
}

0 commit comments

Comments
 (0)