|
1 | 1 | package com.softdev.system.generator.util; |
2 | 2 |
|
3 | | - |
| 3 | +import com.softdev.system.generator.util.mysqlJavaTypeUtil; |
4 | 4 | import com.alibaba.fastjson.JSON; |
5 | 5 | import com.alibaba.fastjson.JSONArray; |
6 | 6 | import com.alibaba.fastjson.JSONObject; |
@@ -196,84 +196,25 @@ public static ClassInfo processTableIntoClassInfo(ParamInfo paramInfo) |
196 | 196 | fieldName = columnName; |
197 | 197 | } |
198 | 198 | 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 | + } |
200 | 203 | //swagger class |
201 | 204 | 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); |
214 | 207 | } |
215 | 208 | // field class |
216 | 209 | // int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', |
217 | | - String fieldClass = Object.class.getSimpleName(); |
| 210 | + String fieldClass = "String"; |
218 | 211 | //2018-9-16 zhengk 补充char/clob/blob/json等类型,如果类型未知,默认为String |
219 | 212 | //2018-11-22 lshz0088 处理字段类型的时候,不严谨columnLine.contains(" int") 类似这种的,可在前后适当加一些空格之类的加以区分,否则当我的字段包含这些字符的时候,产生类型判断问题。 |
220 | 213 | //2020-05-03 MOSHOW.K.ZHENG 优化对所有类型的处理 |
221 | 214 | //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); |
275 | 217 | } |
276 | | - |
277 | 218 | // field comment,MySQL的一般位于field行,而pgsql和oralce多位于后面。 |
278 | 219 | String fieldComment = null; |
279 | 220 | if (tableSql.contains("comment on column") && (tableSql.contains("." + columnName + " is ") || tableSql.contains(".`" + columnName + "` is"))) { |
|
0 commit comments