Skip to content

Commit 6c0e576

Browse files
author
moshowgame
committed
新增insert-sql模式,支持对"insert into table (xxx) values (xxx)"语句进行处理,生成java代码(感谢三叔的建议)
1 parent b30ce86 commit 6c0e576

File tree

5 files changed

+67
-4
lines changed

5 files changed

+67
-4
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
- √ 用DDL-SQL语句生成JPA/JdbcTemplate/Mybatis/MybatisPlus/BeetlSQL相关代码.
1313

1414
# Advantage
15+
- 支持DDL SQL/INSERT SQL/SIMPLE JSON生成模式
1516
- 自动记忆最近生成的内容,最多保留9个
1617
- 支持特殊字符模板(`#`请用``代替;`$`请用``代替)
1718
- 提供众多通用模板,易于使用,复制粘贴加简单修改即可完成CRUD操作
18-
- 支持JSON逆向生成(只支持简单的一级树)
1919

2020

2121
# Url
@@ -33,6 +33,7 @@
3333

3434
|更新日期|更新内容|
3535
|-|-|
36+
|20200522|1.新增insert-sql模式,支持对"insert into table (xxx) values (xxx)"语句进行处理,生成java代码(感谢三叔的建议).|
3637
|20200517|1.代码重构!异常处理优化,Freemarker相关工具类优化,简化模板生成部分,通过template.json来配置需要生成的模板,不需要配置java文件。 2.修复包含comment关键字时注释无法识别的问题。(感谢@1nchaos的反馈) 3.赞赏优化,感谢大家的赞赏 4.新增mapper2(Mybatis-Annotation模板)(感谢@baisi525@CHKEGit的建议)。|
3738
|20200503|1.优化对特殊字符的处理,对于包含#和$等特殊字符的,在模板使用井和¥代替便可,escapeString方法会自动处理<br> 2.优化mybatisplus实体类相关(感谢@chunchengmeigui的反馈) 3.修优化对所有类型的判断(感谢@cnlw的反馈) 4.移除swagger-entity,该功能已经包含在‘swagger-ui’的下拉选项中 5.升级hutool和lombok版本|
3839
|20200306|1.提交一套layuimini+mybatisplus的模板. 2.修复mybatisplus一些相关问题. |

generator-web/src/main/java/com/softdev/system/generator/controller/IndexController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public ReturnT<Map<String, String>> codeGenerate(@RequestBody ParamInfo paramInf
4545
switch (paramInfo.getDataType()){
4646
//JSON模式:parse field from json string
4747
case "json":classInfo = TableParseUtil.processJsonToClassInfo(paramInfo);break;
48+
//INSERT SQL模式:parse field from insert sql
49+
case "insert-sql":classInfo = TableParseUtil.processInsertSqlToClassInfo(paramInfo);break;
4850
//正则表达式模式(非完善版本):parse sql by regex
4951
case "sql-regex":classInfo = TableParseUtil.processTableToClassInfoByRegex(paramInfo);break;
5052
//默认模式:default parse sql by java

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

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
import java.io.IOException;
1212
import java.math.BigDecimal;
1313
import java.util.ArrayList;
14+
import java.util.Arrays;
1415
import java.util.Date;
1516
import java.util.List;
17+
import java.util.concurrent.atomic.AtomicInteger;
1618
import java.util.regex.Matcher;
1719
import java.util.regex.Pattern;
1820

@@ -421,4 +423,61 @@ public static List<FieldInfo> processJsonObjectToFieldList(JSONObject jsonObject
421423
}
422424
return fieldList;
423425
}
426+
427+
public static ClassInfo processInsertSqlToClassInfo(ParamInfo paramInfo) {
428+
// field List
429+
List<FieldInfo> fieldList = new ArrayList<FieldInfo>();
430+
//return classInfo
431+
ClassInfo codeJavaInfo = new ClassInfo();
432+
433+
//get origin sql
434+
String fieldSqlStr = paramInfo.getTableSql().toLowerCase().trim();
435+
fieldSqlStr=fieldSqlStr.replaceAll(" "," ").replaceAll("\\\\n`","")
436+
.replaceAll("\\+","").replaceAll("``","`").replaceAll("\\\\","");
437+
String valueStr = fieldSqlStr.substring(fieldSqlStr.lastIndexOf("values")+6).replaceAll(" ","").replaceAll("\\(","").replaceAll("\\)","");
438+
//get the string between insert into and values
439+
fieldSqlStr=fieldSqlStr.substring(0,fieldSqlStr.lastIndexOf("values"));
440+
441+
System.out.println(fieldSqlStr);
442+
443+
String insertSqlPattenStr = "insert into (?<tableName>.*) \\((?<columnsSQL>.*)\\)";
444+
//String DDL_PATTEN_STR="\\s*create\\s+table\\s+(?<tableName>\\S+)[^\\(]*\\((?<columnsSQL>[\\s\\S]+)\\)[^\\)]+?(comment\\s*(=|on\\s+table)\\s*'(?<tableComment>.*?)'\\s*;?)?$";
445+
446+
Matcher matcher1 = Pattern.compile(insertSqlPattenStr).matcher(fieldSqlStr);
447+
while(matcher1.find()){
448+
449+
String tableName = matcher1.group("tableName");
450+
//System.out.println("tableName:"+tableName);
451+
codeJavaInfo.setClassName(tableName);
452+
codeJavaInfo.setTableName(tableName);
453+
454+
String columnsSQL = matcher1.group("columnsSQL");
455+
//System.out.println("columnsSQL:"+columnsSQL);
456+
457+
List<String> valueList = new ArrayList<>();
458+
//add values as comment
459+
Arrays.stream(valueStr.split(",")).forEach(column->{
460+
valueList.add(column);
461+
});
462+
AtomicInteger n= new AtomicInteger(0);
463+
//add column to fleldList
464+
Arrays.stream(columnsSQL.replaceAll(" ", "").split(",")).forEach(column->{
465+
FieldInfo fieldInfo2 = new FieldInfo();
466+
fieldInfo2.setFieldName(column);
467+
fieldInfo2.setColumnName(column);
468+
fieldInfo2.setFieldClass(String.class.getSimpleName());
469+
if(n.get()<valueList.size()){
470+
fieldInfo2.setFieldComment(column+" , eg."+valueList.get(n.get()));
471+
}
472+
fieldList.add(fieldInfo2);
473+
n.getAndIncrement();
474+
});
475+
476+
}
477+
if(fieldList.size()<1){
478+
throw new CodeGenerateException("INSERT SQL解析失败");
479+
}
480+
codeJavaInfo.setFieldList(fieldList);
481+
return codeJavaInfo;
482+
}
424483
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"version": "20200517"}
1+
{"version": "20200522"}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,10 @@
245245
</div>
246246
<select type="text" class="form-control" id="dataType"
247247
name="dataType">
248-
<option value="sql">sql</option>
248+
<option value="sql">ddl-sql</option>
249249
<option value="json">json</option>
250-
<option value="sql-regex">sql-regex</option>
250+
<option value="insert-sql">insert-sql</option>
251+
<#--<option value="sql-regex">sql-regex</option>-->
251252
</select>
252253
<div class="input-group-prepend">
253254
<span class="input-group-text">tinyint转换类型</span>

0 commit comments

Comments
 (0)