Skip to content

Commit 107c103

Browse files
authored
Merge pull request #136 from jadelike-wine/master
MySQL to Java type conversion @jadelike-wine
2 parents 781a7ff + 37e83ef commit 107c103

File tree

2 files changed

+69
-69
lines changed

2 files changed

+69
-69
lines changed

generator-web/src/main/java/com/softdev/system/generator/util/TableParseUtil.java

Lines changed: 10 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.softdev.system.generator.util;
22

3-
3+
import com.softdev.system.generator.util.mysqlJavaTypeUtil;
44
import com.alibaba.fastjson.JSON;
55
import com.alibaba.fastjson.JSONArray;
66
import com.alibaba.fastjson.JSONObject;
@@ -196,84 +196,25 @@ public static ClassInfo processTableIntoClassInfo(ParamInfo paramInfo)
196196
fieldName = columnName;
197197
}
198198
columnLine = columnLine.substring(columnLine.indexOf("`") + 1).trim();
199-
199+
String mysqlType = columnLine.split("\\s+")[1];
200+
if(mysqlType.contains("(")){
201+
mysqlType = mysqlType.substring(0, mysqlType.indexOf("("));
202+
}
200203
//swagger class
201204
String swaggerClass = "string" ;
202-
if (columnLine.contains(" tinyint")) {
203-
swaggerClass = "integer";
204-
} else if (columnLine.contains(" int") || columnLine.contains(" smallint")) {
205-
swaggerClass = "integer";
206-
} else if (columnLine.contains(" bigint")) {
207-
swaggerClass = "integer";
208-
} else if (columnLine.contains(" float")) {
209-
swaggerClass = "number";
210-
} else if (columnLine.contains(" double")) {
211-
swaggerClass = "number";
212-
} else if (columnLine.contains(" boolean")) {
213-
swaggerClass = "boolean";
205+
if(mysqlJavaTypeUtil.getMysqlSwaggerTypeMap().containsKey(mysqlType)){
206+
swaggerClass = mysqlJavaTypeUtil.getMysqlSwaggerTypeMap().get(mysqlType);
214207
}
215208
// field class
216209
// int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
217-
String fieldClass = Object.class.getSimpleName();
210+
String fieldClass = "String";
218211
//2018-9-16 zhengk 补充char/clob/blob/json等类型,如果类型未知,默认为String
219212
//2018-11-22 lshz0088 处理字段类型的时候,不严谨columnLine.contains(" int") 类似这种的,可在前后适当加一些空格之类的加以区分,否则当我的字段包含这些字符的时候,产生类型判断问题。
220213
//2020-05-03 MOSHOW.K.ZHENG 优化对所有类型的处理
221214
//2020-10-20 zhengkai 新增包装类型的转换选择
222-
if (columnLine.contains(" tinyint")) {
223-
//20191115 MOSHOW.K.ZHENG 支持对tinyint的特殊处理
224-
fieldClass = MapUtil.getString(paramInfo.getOptions(),"tinyintTransType");;
225-
} else if (columnLine.contains(" int") || columnLine.contains(" smallint")) {
226-
fieldClass = (isPackageType)?Integer.class.getSimpleName():"int";
227-
} else if (columnLine.contains(" bigint")) {
228-
fieldClass = (isPackageType)?Long.class.getSimpleName():"long";
229-
} else if (columnLine.contains(" float")) {
230-
fieldClass = (isPackageType)?Float.class.getSimpleName():"float";
231-
} else if (columnLine.contains(" double")) {
232-
fieldClass = (isPackageType)?Double.class.getSimpleName():"double";
233-
} else if (columnLine.contains(" time") || columnLine.contains(" date") || columnLine.contains(" datetime") || columnLine.contains(" timestamp")) {
234-
fieldClass = MapUtil.getString(paramInfo.getOptions(),"timeTransType");
235-
} else if (columnLine.contains(" varchar") || columnLine.contains(" text") || columnLine.contains(" char")
236-
|| columnLine.contains(" clob") || columnLine.contains(" blob") || columnLine.contains(" json")) {
237-
fieldClass = String.class.getSimpleName();
238-
} else if (columnLine.contains(" decimal") || columnLine.contains(" number")) {
239-
//2018-11-22 lshz0088 建议对number类型增加int,long,BigDecimal的区分判断
240-
//如果startKh大于等于0,则表示有设置取值范围
241-
int startKh = columnLine.indexOf("(");
242-
if (startKh >= 0) {
243-
int endKh = columnLine.indexOf(")", startKh);
244-
String[] fanwei = columnLine.substring(startKh + 1, endKh).split(",");
245-
//2019-1-5 zhengk 修复@arthaschan反馈的超出范围错误
246-
//System.out.println("fanwei"+ JSON.toJSONString(fanwei));
247-
// //number(20,6) fanwei["20","6"]
248-
// //number(0,6) fanwei["0","6"]
249-
// //number(20,0) fanwei["20","0"]
250-
// //number(20) fanwei["20"]
251-
//如果括号里是1位或者2位且第二位为0,则进行特殊处理。只有有小数位,都设置为BigDecimal。
252-
if ((fanwei.length > 1 && "0".equals(fanwei[1])) || fanwei.length == 1) {
253-
int length = Integer.parseInt(fanwei[0]);
254-
if (fanwei.length > 1) {
255-
length = Integer.valueOf(fanwei[1]);
256-
}
257-
//数字范围9位及一下用Integer,大的用Long
258-
if (length <= 9) {
259-
fieldClass = (isPackageType)?Integer.class.getSimpleName():"int";
260-
} else {
261-
fieldClass = (isPackageType)?Long.class.getSimpleName():"long";
262-
}
263-
} else {
264-
//有小数位数一律使用BigDecimal
265-
fieldClass = BigDecimal.class.getSimpleName();
266-
}
267-
} else {
268-
fieldClass = BigDecimal.class.getSimpleName();
269-
}
270-
} else if (columnLine.contains(" boolean")) {
271-
//20190910 MOSHOW.K.ZHENG 新增对boolean的处理(感谢@violinxsc的反馈)以及修复tinyint类型字段无法生成boolean类型问题(感谢@hahaYhui的反馈)
272-
fieldClass = (isPackageType)?Boolean.class.getSimpleName():"boolean";
273-
} else {
274-
fieldClass = String.class.getSimpleName();
215+
if(mysqlJavaTypeUtil.getMysqlJavaTypeMap().containsKey(mysqlType)){
216+
fieldClass = mysqlJavaTypeUtil.getMysqlJavaTypeMap().get(mysqlType);
275217
}
276-
277218
// field comment,MySQL的一般位于field行,而pgsql和oralce多位于后面。
278219
String fieldComment = null;
279220
if (tableSql.contains("comment on column") && (tableSql.contains("." + columnName + " is ") || tableSql.contains(".`" + columnName + "` is"))) {
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.softdev.system.generator.util;
2+
3+
import java.util.Collections;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
/**
8+
* @author lvyanpu
9+
*/
10+
public final class mysqlJavaTypeUtil {
11+
public static final HashMap<String, String> mysqlJavaTypeMap = new HashMap<String, String>();
12+
public static final HashMap<String, String> mysqlSwaggerTypeMap =new HashMap<String, String>();
13+
14+
static{
15+
mysqlJavaTypeMap.put("bigint","Long");
16+
mysqlJavaTypeMap.put("int","Integer");
17+
mysqlJavaTypeMap.put("tinyint","Integer");
18+
mysqlJavaTypeMap.put("smallint","Integer");
19+
mysqlJavaTypeMap.put("mediumint","Integer");
20+
mysqlJavaTypeMap.put("integer","Integer");
21+
//小数
22+
mysqlJavaTypeMap.put("float","Float");
23+
mysqlJavaTypeMap.put("double","Double");
24+
mysqlJavaTypeMap.put("decimal","Double");
25+
//bool
26+
mysqlJavaTypeMap.put("bit","Boolean");
27+
//字符串
28+
mysqlJavaTypeMap.put("char","String");
29+
mysqlJavaTypeMap.put("varchar","String");
30+
mysqlJavaTypeMap.put("tinytext","String");
31+
mysqlJavaTypeMap.put("text","String");
32+
mysqlJavaTypeMap.put("mediumtext","String");
33+
mysqlJavaTypeMap.put("longtext","String");
34+
//日期
35+
mysqlJavaTypeMap.put("date","Date");
36+
mysqlJavaTypeMap.put("datetime","Date");
37+
mysqlJavaTypeMap.put("timestamp","Date");
38+
39+
40+
mysqlSwaggerTypeMap.put("bigint","integer");
41+
mysqlSwaggerTypeMap.put("int","integer");
42+
mysqlSwaggerTypeMap.put("tinyint","integer");
43+
mysqlSwaggerTypeMap.put("smallint","integer");
44+
mysqlSwaggerTypeMap.put("mediumint","integer");
45+
mysqlSwaggerTypeMap.put("integer","integer");
46+
mysqlSwaggerTypeMap.put("boolean","boolean");
47+
mysqlSwaggerTypeMap.put("float","number");
48+
mysqlSwaggerTypeMap.put("double","number");
49+
mysqlSwaggerTypeMap.put("decimal","Double");
50+
}
51+
52+
public static HashMap<String, String> getMysqlJavaTypeMap() {
53+
return mysqlJavaTypeMap;
54+
}
55+
56+
public static HashMap<String, String> getMysqlSwaggerTypeMap() {
57+
return mysqlSwaggerTypeMap;
58+
}
59+
}

0 commit comments

Comments
 (0)