Skip to content

Commit 1bb8881

Browse files
committed
Update
4.新增对复制String代码中的乱SQL代码的支持 5.优化对JSON的父子节点/处理,JSONObject和JSONArray节点处理,子节点缺失'{'头处理
1 parent dae6628 commit 1bb8881

File tree

4 files changed

+84
-30
lines changed

4 files changed

+84
-30
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
|更新日期|更新内容|
2828
|-|-|
29-
|20191124|1.java代码结构优化. 2.新增简单的json生成模式 3.新增简单的正则表达式匹配模式(感谢@ydq的贡献) |
29+
|20191124|1.java代码结构优化. 2.新增简单的json生成模式 3.新增简单的正则表达式匹配模式(感谢@ydq的贡献) 4.新增对复制String代码中的乱SQL代码的支持 5.优化对JSON的父子节点/处理,JSONObject和JSONArray节点处理,子节点缺失'{'头处理|
3030
|20191123|1.移除频繁出错和被过滤的layer,改为jquery-toast. 2.Util功能优化,新增json和xml.|
3131
|20191116|优化对primary关键字的处理(感谢@liujiansgit的反馈). |
3232
|20191115|1.添加tinyint类型转换(感谢@lixiliang&@liujiansgit的Suggestion) 2.添加一键复制功能(感谢@gaohanghang的Suggestion) 3.Mybatis的insert增加keyProperty="id"用于返回自增id(感谢@88888888888888888888的Suggestion) 4.优化date类型的支持(感谢@SteveLsf的反馈) 5.其他一些优化. |

generator-web/src/main/java/com/softdev/system/generator/entity/ParamInfo.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@ public class ParamInfo {
1212
private String authorName;
1313
private String packageName;
1414
private String returnUtil;
15-
private boolean isUnderLineToCamelCase;
16-
String tinyintTransType;
17-
String dataType;
15+
private String nameCaseType;
16+
private String tinyintTransType;
17+
private String dataType;
18+
19+
@Data
20+
public static class NAME_CASE_TYPE{
21+
public static String CAMEL_CASE="CamelCase";
22+
public static String UNDER_SCORE_CASE="UnderScoreCase";
23+
public static String UPPER_UNDER_SCORE_CASE="UpperUnderScoreCase";
24+
}
1825
}

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

Lines changed: 65 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import cn.hutool.core.util.XmlUtil;
55
import com.alibaba.fastjson.JSON;
6+
import com.alibaba.fastjson.JSONArray;
67
import com.alibaba.fastjson.JSONObject;
78
import com.softdev.system.generator.entity.ClassInfo;
89
import com.softdev.system.generator.entity.FieldInfo;
@@ -32,14 +33,18 @@ public static ClassInfo processTableIntoClassInfo(ParamInfo paramInfo)
3233
throws IOException {
3334
//process the param
3435
String tableSql=paramInfo.getTableSql();
35-
boolean isUnderLineToCamelCase=paramInfo.isUnderLineToCamelCase();
36+
String nameCaseType=paramInfo.getNameCaseType();
3637
String tinyintTransType=paramInfo.getTinyintTransType();
3738

3839
if (tableSql==null || tableSql.trim().length()==0) {
3940
throw new CodeGenerateException("Table structure can not be empty.");
4041
}
42+
//deal with special character
4143
tableSql = tableSql.trim().replaceAll("'","`").replaceAll("\"","`").replaceAll(",",",").toLowerCase();
42-
44+
//deal with java string copy \n"
45+
System.out.println(tableSql);
46+
tableSql = tableSql.trim().replaceAll("n`","").replaceAll("\\+","").replaceAll("``","`").replaceAll("\\\\","");
47+
System.out.println(tableSql);
4348
// table Name
4449
String tableName = null;
4550
if (tableSql.contains("TABLE") && tableSql.contains("(")) {
@@ -173,14 +178,18 @@ public static ClassInfo processTableIntoClassInfo(ParamInfo paramInfo)
173178
columnName = columnLine.substring(0, columnLine.indexOf(" "));
174179
// field Name
175180
// 2019-09-08 yj 添加是否下划线转换为驼峰的判断
176-
String fieldName;
177-
if(isUnderLineToCamelCase){
181+
String fieldName=null;
182+
if(ParamInfo.NAME_CASE_TYPE.CAMEL_CASE.equals(nameCaseType)){
178183
fieldName = StringUtils.lowerCaseFirst(StringUtils.underlineToCamelCase(columnName));
179184
if (fieldName.contains("_")) {
180185
fieldName = fieldName.replaceAll("_", "");
181186
}
182-
}else {
187+
}else if(ParamInfo.NAME_CASE_TYPE.UNDER_SCORE_CASE.equals(nameCaseType)){
183188
fieldName = StringUtils.lowerCaseFirst(columnName);
189+
}else if(ParamInfo.NAME_CASE_TYPE.UPPER_UNDER_SCORE_CASE.equals(nameCaseType)){
190+
fieldName = StringUtils.lowerCaseFirst(columnName.toUpperCase());
191+
}else{
192+
fieldName=columnName;
184193
}
185194

186195
// field class
@@ -305,25 +314,26 @@ public static ClassInfo processTableIntoClassInfo(ParamInfo paramInfo)
305314
* @return
306315
*/
307316
public static ClassInfo processJsonToClassInfo(ParamInfo paramInfo){
308-
// field List
309-
List<FieldInfo> fieldList = new ArrayList<FieldInfo>();
310-
311-
if(JSON.isValid(paramInfo.getTableSql())){
312-
JSONObject jsonObject = JSONObject.parseObject(paramInfo.getTableSql().trim());
313-
jsonObject.keySet().stream().forEach(jsonField->{
314-
FieldInfo fieldInfo = new FieldInfo();
315-
fieldInfo.setFieldName(jsonField);
316-
fieldInfo.setColumnName(jsonField);
317-
fieldInfo.setFieldClass(String.class.getSimpleName());
318-
fieldInfo.setFieldComment(jsonField);
319-
fieldList.add(fieldInfo);
320-
});
321-
}
322317
ClassInfo codeJavaInfo = new ClassInfo();
323318
codeJavaInfo.setTableName("JsonDto");
324319
codeJavaInfo.setClassName("JsonDto");
325320
codeJavaInfo.setClassComment("JsonDto");
326-
codeJavaInfo.setFieldList(fieldList);
321+
322+
//support children json if forget to add '{' in front of json
323+
if(paramInfo.getTableSql().trim().startsWith("\"")){
324+
paramInfo.setTableSql("{"+paramInfo.getTableSql());
325+
}
326+
if(JSON.isValid(paramInfo.getTableSql())){
327+
if(paramInfo.getTableSql().trim().startsWith("{")){
328+
JSONObject jsonObject = JSONObject.parseObject(paramInfo.getTableSql().trim());
329+
//parse FieldList by JSONObject
330+
codeJavaInfo.setFieldList(processJsonObjectToFieldList(jsonObject));
331+
}else if(paramInfo.getTableSql().trim().startsWith("[")){
332+
JSONArray jsonArray=JSONArray.parseArray(paramInfo.getTableSql().trim());
333+
//parse FieldList by JSONObject
334+
codeJavaInfo.setFieldList(processJsonObjectToFieldList(jsonArray.getJSONObject(0)));
335+
}
336+
}
327337

328338
return codeJavaInfo;
329339
}
@@ -377,4 +387,39 @@ public static ClassInfo processTableToClassInfoByRegex(ParamInfo paramInfo){
377387
}
378388
return codeJavaInfo;
379389
}
390+
public static List<FieldInfo> processJsonObjectToFieldList(JSONObject jsonObject){
391+
// field List
392+
List<FieldInfo> fieldList = new ArrayList<FieldInfo>();
393+
jsonObject.keySet().stream().forEach(jsonField->{
394+
FieldInfo fieldInfo = new FieldInfo();
395+
fieldInfo.setFieldName(jsonField);
396+
fieldInfo.setColumnName(jsonField);
397+
fieldInfo.setFieldClass(String.class.getSimpleName());
398+
fieldInfo.setFieldComment("father:"+jsonField);
399+
fieldList.add(fieldInfo);
400+
if(jsonObject.get(jsonField) instanceof JSONArray){
401+
jsonObject.getJSONArray(jsonField).stream().forEach(arrayObject->{
402+
FieldInfo fieldInfo2 = new FieldInfo();
403+
fieldInfo2.setFieldName(arrayObject.toString());
404+
fieldInfo2.setColumnName(arrayObject.toString());
405+
fieldInfo2.setFieldClass(String.class.getSimpleName());
406+
fieldInfo2.setFieldComment("children:"+arrayObject.toString());
407+
fieldList.add(fieldInfo2);
408+
});
409+
}else if(jsonObject.get(jsonField) instanceof JSONObject){
410+
jsonObject.getJSONObject(jsonField).keySet().stream().forEach(arrayObject->{
411+
FieldInfo fieldInfo2 = new FieldInfo();
412+
fieldInfo2.setFieldName(arrayObject.toString());
413+
fieldInfo2.setColumnName(arrayObject.toString());
414+
fieldInfo2.setFieldClass(String.class.getSimpleName());
415+
fieldInfo2.setFieldComment("children:"+arrayObject.toString());
416+
fieldList.add(fieldInfo2);
417+
});
418+
}
419+
});
420+
if(fieldList.size()<1){
421+
throw new CodeGenerateException("JSON解析失败");
422+
}
423+
return fieldList;
424+
}
380425
}

generator-web/src/main/resources/templates/index.ftl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
"returnUtil":$("#returnUtil").val(),
5858
"authorName":$("#authorName").val(),
5959
"dataType":$("#dataType").val(),
60-
"isUnderLineToCamelCase":$("#isUnderLineToCamelCase").val()
60+
"nameCaseType":$("#nameCaseType").val()
6161
},
6262
dataType: "json",
6363
success: function (data) {
@@ -167,14 +167,16 @@
167167
<option value="Boolean">Boolean</option>
168168
<option value="Integer">Integer</option>
169169
<option value="int">int</option>
170+
<option value="String">String</option>
170171
</select>
171172
<div class="input-group-prepend">
172-
<span class="input-group-text">是否转换下划线为驼峰</span>
173+
<span class="input-group-text">命名转换规则</span>
173174
</div>
174-
<select type="text" class="form-control" id="isUnderLineToCamelCase"
175-
name="isUnderLineToCamelCase">
176-
<option value="true">转换</option>
177-
<option value="false">不转换</option>
175+
<select type="text" class="form-control" id="nameCaseType"
176+
name="nameCaseType">
177+
<option value="CamelCase">驼峰</option>
178+
<option value="UnderScoreCase">下划线</option>
179+
<#--<option value="UpperUnderScoreCase">大写下划线</option>-->
178180
</select>
179181
</div>
180182
<textarea id="ddlSqlArea" placeholder="请输入表结构信息..." class="form-control btn-lg" style="height: 250px;">

0 commit comments

Comments
 (0)