新增insert-sql模式,支持对"insert into table (xxx) values (xxx)"语句进行处理,生成java代码(感谢三叔的建议)

This commit is contained in:
moshowgame
2020-05-22 00:50:54 +08:00
parent b30ce868ff
commit 6c0e5764d4
5 changed files with 67 additions and 4 deletions

View File

@@ -12,10 +12,10 @@
- √ 用DDL-SQL语句生成JPA/JdbcTemplate/Mybatis/MybatisPlus/BeetlSQL相关代码.
# Advantage
- 支持DDL SQL/INSERT SQL/SIMPLE JSON生成模式
- 自动记忆最近生成的内容最多保留9个
- 支持特殊字符模板(`#`请用`井`代替;`$`请用`¥`代替)
- 提供众多通用模板易于使用复制粘贴加简单修改即可完成CRUD操作
- 支持JSON逆向生成(只支持简单的一级树)
# Url
@@ -33,6 +33,7 @@
|更新日期|更新内容|
|-|-|
|20200522|1.新增insert-sql模式支持对"insert into table (xxx) values (xxx)"语句进行处理生成java代码(感谢三叔的建议).|
|20200517|1.代码重构异常处理优化Freemarker相关工具类优化简化模板生成部分通过template.json来配置需要生成的模板不需要配置java文件。 2.修复包含comment关键字时注释无法识别的问题。(感谢@1nchaos的反馈) 3.赞赏优化,感谢大家的赞赏 4.新增mapper2(Mybatis-Annotation模板)(感谢@baisi525和@CHKEGit的建议)。|
|20200503|1.优化对特殊字符的处理,对于包含#和$等特殊字符的在模板使用井和¥代替便可escapeString方法会自动处理<br> 2.优化mybatisplus实体类相关(感谢@chunchengmeigui的反馈) 3.修优化对所有类型的判断(感谢@cnlw的反馈) 4.移除swagger-entity该功能已经包含在swagger-ui的下拉选项中 5.升级hutool和lombok版本|
|20200306|1.提交一套layuimini+mybatisplus的模板. 2.修复mybatisplus一些相关问题. |

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -1 +1 @@
{"version": "20200517"}
{"version": "20200522"}

View File

@@ -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>