diff --git a/README.md b/README.md index d286c6d..074207d 100644 --- a/README.md +++ b/README.md @@ -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方法会自动处理
2.优化mybatisplus实体类相关(感谢@chunchengmeigui的反馈) 3.修优化对所有类型的判断(感谢@cnlw的反馈) 4.移除swagger-entity,该功能已经包含在‘swagger-ui’的下拉选项中 5.升级hutool和lombok版本| |20200306|1.提交一套layuimini+mybatisplus的模板. 2.修复mybatisplus一些相关问题. | diff --git a/generator-web/src/main/java/com/softdev/system/generator/controller/IndexController.java b/generator-web/src/main/java/com/softdev/system/generator/controller/IndexController.java index 2b75849..bc2ffcf 100644 --- a/generator-web/src/main/java/com/softdev/system/generator/controller/IndexController.java +++ b/generator-web/src/main/java/com/softdev/system/generator/controller/IndexController.java @@ -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 diff --git a/generator-web/src/main/java/com/softdev/system/generator/util/TableParseUtil.java b/generator-web/src/main/java/com/softdev/system/generator/util/TableParseUtil.java index 424ef08..1544fa8 100644 --- a/generator-web/src/main/java/com/softdev/system/generator/util/TableParseUtil.java +++ b/generator-web/src/main/java/com/softdev/system/generator/util/TableParseUtil.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 fieldList = new ArrayList(); + //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 (?.*) \\((?.*)\\)"; + //String DDL_PATTEN_STR="\\s*create\\s+table\\s+(?\\S+)[^\\(]*\\((?[\\s\\S]+)\\)[^\\)]+?(comment\\s*(=|on\\s+table)\\s*'(?.*?)'\\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 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()
tinyint转换类型