mirror of
https://github.com/moshowgame/SpringBootCodeGenerator.git
synced 2026-03-22 07:28:25 +08:00
新增insert-sql模式,支持对"insert into table (xxx) values (xxx)"语句进行处理,生成java代码(感谢三叔的建议)
This commit is contained in:
@@ -45,6 +45,8 @@ public class IndexController {
|
||||
switch (paramInfo.getDataType()){
|
||||
//JSON模式:parse field from json string
|
||||
case "json":classInfo = TableParseUtil.processJsonToClassInfo(paramInfo);break;
|
||||
//INSERT SQL模式:parse field from insert sql
|
||||
case "insert-sql":classInfo = TableParseUtil.processInsertSqlToClassInfo(paramInfo);break;
|
||||
//正则表达式模式(非完善版本):parse sql by regex
|
||||
case "sql-regex":classInfo = TableParseUtil.processTableToClassInfoByRegex(paramInfo);break;
|
||||
//默认模式:default parse sql by java
|
||||
|
||||
@@ -11,8 +11,10 @@ import com.softdev.system.generator.entity.ParamInfo;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@@ -421,4 +423,61 @@ public class TableParseUtil {
|
||||
}
|
||||
return fieldList;
|
||||
}
|
||||
|
||||
public static ClassInfo processInsertSqlToClassInfo(ParamInfo paramInfo) {
|
||||
// field List
|
||||
List<FieldInfo> fieldList = new ArrayList<FieldInfo>();
|
||||
//return classInfo
|
||||
ClassInfo codeJavaInfo = new ClassInfo();
|
||||
|
||||
//get origin sql
|
||||
String fieldSqlStr = paramInfo.getTableSql().toLowerCase().trim();
|
||||
fieldSqlStr=fieldSqlStr.replaceAll(" "," ").replaceAll("\\\\n`","")
|
||||
.replaceAll("\\+","").replaceAll("``","`").replaceAll("\\\\","");
|
||||
String valueStr = fieldSqlStr.substring(fieldSqlStr.lastIndexOf("values")+6).replaceAll(" ","").replaceAll("\\(","").replaceAll("\\)","");
|
||||
//get the string between insert into and values
|
||||
fieldSqlStr=fieldSqlStr.substring(0,fieldSqlStr.lastIndexOf("values"));
|
||||
|
||||
System.out.println(fieldSqlStr);
|
||||
|
||||
String insertSqlPattenStr = "insert into (?<tableName>.*) \\((?<columnsSQL>.*)\\)";
|
||||
//String DDL_PATTEN_STR="\\s*create\\s+table\\s+(?<tableName>\\S+)[^\\(]*\\((?<columnsSQL>[\\s\\S]+)\\)[^\\)]+?(comment\\s*(=|on\\s+table)\\s*'(?<tableComment>.*?)'\\s*;?)?$";
|
||||
|
||||
Matcher matcher1 = Pattern.compile(insertSqlPattenStr).matcher(fieldSqlStr);
|
||||
while(matcher1.find()){
|
||||
|
||||
String tableName = matcher1.group("tableName");
|
||||
//System.out.println("tableName:"+tableName);
|
||||
codeJavaInfo.setClassName(tableName);
|
||||
codeJavaInfo.setTableName(tableName);
|
||||
|
||||
String columnsSQL = matcher1.group("columnsSQL");
|
||||
//System.out.println("columnsSQL:"+columnsSQL);
|
||||
|
||||
List<String> valueList = new ArrayList<>();
|
||||
//add values as comment
|
||||
Arrays.stream(valueStr.split(",")).forEach(column->{
|
||||
valueList.add(column);
|
||||
});
|
||||
AtomicInteger n= new AtomicInteger(0);
|
||||
//add column to fleldList
|
||||
Arrays.stream(columnsSQL.replaceAll(" ", "").split(",")).forEach(column->{
|
||||
FieldInfo fieldInfo2 = new FieldInfo();
|
||||
fieldInfo2.setFieldName(column);
|
||||
fieldInfo2.setColumnName(column);
|
||||
fieldInfo2.setFieldClass(String.class.getSimpleName());
|
||||
if(n.get()<valueList.size()){
|
||||
fieldInfo2.setFieldComment(column+" , eg."+valueList.get(n.get()));
|
||||
}
|
||||
fieldList.add(fieldInfo2);
|
||||
n.getAndIncrement();
|
||||
});
|
||||
|
||||
}
|
||||
if(fieldList.size()<1){
|
||||
throw new CodeGenerateException("INSERT SQL解析失败");
|
||||
}
|
||||
codeJavaInfo.setFieldList(fieldList);
|
||||
return codeJavaInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version": "20200517"}
|
||||
{"version": "20200522"}
|
||||
@@ -245,9 +245,10 @@
|
||||
</div>
|
||||
<select type="text" class="form-control" id="dataType"
|
||||
name="dataType">
|
||||
<option value="sql">sql</option>
|
||||
<option value="sql">ddl-sql</option>
|
||||
<option value="json">json</option>
|
||||
<option value="sql-regex">sql-regex</option>
|
||||
<option value="insert-sql">insert-sql</option>
|
||||
<#--<option value="sql-regex">sql-regex</option>-->
|
||||
</select>
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">tinyint转换类型</span>
|
||||
|
||||
Reference in New Issue
Block a user