4.新增对复制String代码中的乱SQL代码的支持 5.优化对JSON的父子节点/处理,JSONObject和JSONArray节点处理,子节点缺失'{'头处理
This commit is contained in:
MOSHOW.K.ZHENG 2019-11-24 12:08:24 +08:00
parent dae662836b
commit 1bb8881928
4 changed files with 84 additions and 30 deletions

View File

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

View File

@ -12,7 +12,14 @@ public class ParamInfo {
private String authorName;
private String packageName;
private String returnUtil;
private boolean isUnderLineToCamelCase;
String tinyintTransType;
String dataType;
private String nameCaseType;
private String tinyintTransType;
private String dataType;
@Data
public static class NAME_CASE_TYPE{
public static String CAMEL_CASE="CamelCase";
public static String UNDER_SCORE_CASE="UnderScoreCase";
public static String UPPER_UNDER_SCORE_CASE="UpperUnderScoreCase";
}
}

View File

@ -3,6 +3,7 @@ package com.softdev.system.generator.util;
import cn.hutool.core.util.XmlUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.softdev.system.generator.entity.ClassInfo;
import com.softdev.system.generator.entity.FieldInfo;
@ -32,14 +33,18 @@ public class TableParseUtil {
throws IOException {
//process the param
String tableSql=paramInfo.getTableSql();
boolean isUnderLineToCamelCase=paramInfo.isUnderLineToCamelCase();
String nameCaseType=paramInfo.getNameCaseType();
String tinyintTransType=paramInfo.getTinyintTransType();
if (tableSql==null || tableSql.trim().length()==0) {
throw new CodeGenerateException("Table structure can not be empty.");
}
//deal with special character
tableSql = tableSql.trim().replaceAll("'","`").replaceAll("\"","`").replaceAll("",",").toLowerCase();
//deal with java string copy \n"
System.out.println(tableSql);
tableSql = tableSql.trim().replaceAll("n`","").replaceAll("\\+","").replaceAll("``","`").replaceAll("\\\\","");
System.out.println(tableSql);
// table Name
String tableName = null;
if (tableSql.contains("TABLE") && tableSql.contains("(")) {
@ -173,14 +178,18 @@ public class TableParseUtil {
columnName = columnLine.substring(0, columnLine.indexOf(" "));
// field Name
// 2019-09-08 yj 添加是否下划线转换为驼峰的判断
String fieldName;
if(isUnderLineToCamelCase){
String fieldName=null;
if(ParamInfo.NAME_CASE_TYPE.CAMEL_CASE.equals(nameCaseType)){
fieldName = StringUtils.lowerCaseFirst(StringUtils.underlineToCamelCase(columnName));
if (fieldName.contains("_")) {
fieldName = fieldName.replaceAll("_", "");
}
}else {
}else if(ParamInfo.NAME_CASE_TYPE.UNDER_SCORE_CASE.equals(nameCaseType)){
fieldName = StringUtils.lowerCaseFirst(columnName);
}else if(ParamInfo.NAME_CASE_TYPE.UPPER_UNDER_SCORE_CASE.equals(nameCaseType)){
fieldName = StringUtils.lowerCaseFirst(columnName.toUpperCase());
}else{
fieldName=columnName;
}
// field class
@ -305,25 +314,26 @@ public class TableParseUtil {
* @return
*/
public static ClassInfo processJsonToClassInfo(ParamInfo paramInfo){
// field List
List<FieldInfo> fieldList = new ArrayList<FieldInfo>();
if(JSON.isValid(paramInfo.getTableSql())){
JSONObject jsonObject = JSONObject.parseObject(paramInfo.getTableSql().trim());
jsonObject.keySet().stream().forEach(jsonField->{
FieldInfo fieldInfo = new FieldInfo();
fieldInfo.setFieldName(jsonField);
fieldInfo.setColumnName(jsonField);
fieldInfo.setFieldClass(String.class.getSimpleName());
fieldInfo.setFieldComment(jsonField);
fieldList.add(fieldInfo);
});
}
ClassInfo codeJavaInfo = new ClassInfo();
codeJavaInfo.setTableName("JsonDto");
codeJavaInfo.setClassName("JsonDto");
codeJavaInfo.setClassComment("JsonDto");
codeJavaInfo.setFieldList(fieldList);
//support children json if forget to add '{' in front of json
if(paramInfo.getTableSql().trim().startsWith("\"")){
paramInfo.setTableSql("{"+paramInfo.getTableSql());
}
if(JSON.isValid(paramInfo.getTableSql())){
if(paramInfo.getTableSql().trim().startsWith("{")){
JSONObject jsonObject = JSONObject.parseObject(paramInfo.getTableSql().trim());
//parse FieldList by JSONObject
codeJavaInfo.setFieldList(processJsonObjectToFieldList(jsonObject));
}else if(paramInfo.getTableSql().trim().startsWith("[")){
JSONArray jsonArray=JSONArray.parseArray(paramInfo.getTableSql().trim());
//parse FieldList by JSONObject
codeJavaInfo.setFieldList(processJsonObjectToFieldList(jsonArray.getJSONObject(0)));
}
}
return codeJavaInfo;
}
@ -377,4 +387,39 @@ public class TableParseUtil {
}
return codeJavaInfo;
}
public static List<FieldInfo> processJsonObjectToFieldList(JSONObject jsonObject){
// field List
List<FieldInfo> fieldList = new ArrayList<FieldInfo>();
jsonObject.keySet().stream().forEach(jsonField->{
FieldInfo fieldInfo = new FieldInfo();
fieldInfo.setFieldName(jsonField);
fieldInfo.setColumnName(jsonField);
fieldInfo.setFieldClass(String.class.getSimpleName());
fieldInfo.setFieldComment("father:"+jsonField);
fieldList.add(fieldInfo);
if(jsonObject.get(jsonField) instanceof JSONArray){
jsonObject.getJSONArray(jsonField).stream().forEach(arrayObject->{
FieldInfo fieldInfo2 = new FieldInfo();
fieldInfo2.setFieldName(arrayObject.toString());
fieldInfo2.setColumnName(arrayObject.toString());
fieldInfo2.setFieldClass(String.class.getSimpleName());
fieldInfo2.setFieldComment("children:"+arrayObject.toString());
fieldList.add(fieldInfo2);
});
}else if(jsonObject.get(jsonField) instanceof JSONObject){
jsonObject.getJSONObject(jsonField).keySet().stream().forEach(arrayObject->{
FieldInfo fieldInfo2 = new FieldInfo();
fieldInfo2.setFieldName(arrayObject.toString());
fieldInfo2.setColumnName(arrayObject.toString());
fieldInfo2.setFieldClass(String.class.getSimpleName());
fieldInfo2.setFieldComment("children:"+arrayObject.toString());
fieldList.add(fieldInfo2);
});
}
});
if(fieldList.size()<1){
throw new CodeGenerateException("JSON解析失败");
}
return fieldList;
}
}

View File

@ -57,7 +57,7 @@
"returnUtil":$("#returnUtil").val(),
"authorName":$("#authorName").val(),
"dataType":$("#dataType").val(),
"isUnderLineToCamelCase":$("#isUnderLineToCamelCase").val()
"nameCaseType":$("#nameCaseType").val()
},
dataType: "json",
success: function (data) {
@ -167,14 +167,16 @@
<option value="Boolean">Boolean</option>
<option value="Integer">Integer</option>
<option value="int">int</option>
<option value="String">String</option>
</select>
<div class="input-group-prepend">
<span class="input-group-text">是否转换下划线为驼峰</span>
<span class="input-group-text">命名转换规则</span>
</div>
<select type="text" class="form-control" id="isUnderLineToCamelCase"
name="isUnderLineToCamelCase">
<option value="true">转换</option>
<option value="false">不转换</option>
<select type="text" class="form-control" id="nameCaseType"
name="nameCaseType">
<option value="CamelCase">驼峰</option>
<option value="UnderScoreCase">下划线</option>
<#--<option value="UpperUnderScoreCase">大写下划线</option>-->
</select>
</div>
<textarea id="ddlSqlArea" placeholder="请输入表结构信息..." class="form-control btn-lg" style="height: 250px;">