From 3059e270a3fad9b1c944125bc25f6df36906e8ce Mon Sep 17 00:00:00 2001 From: "moshowgame@126.com" Date: Mon, 29 Apr 2019 22:09:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=94=E5=9B=9E=E5=B0=81?= =?UTF-8?q?=E8=A3=85=E5=B7=A5=E5=85=B7=E7=B1=BB=E8=AE=BE=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=B9oracle=E6=B3=A8=E9=87=8Acomment=20on?= =?UTF-8?q?=20column=E7=9A=84=E6=94=AF=E6=8C=81=EF=BC=88=E6=84=9F=E8=B0=A2?= =?UTF-8?q?@liukex=E7=9A=84=E5=8F=8D=E9=A6=88=EF=BC=89=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=AF=B9=E6=99=AE=E9=80=9A=E5=92=8C=E7=89=B9=E6=AE=8A?= =?UTF-8?q?storage=E5=85=B3=E9=94=AE=E5=AD=97=E7=9A=84=E5=88=A4=E6=96=AD?= =?UTF-8?q?=EF=BC=88=E6=84=9F=E8=B0=A2@AhHeadFloating=E7=9A=84=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=20=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../generator/controller/IndexController.java | 4 +- .../system/generator/entity/ReturnT.java | 4 +- .../system/generator/util/TableParseUtil.java | 54 +++++++++++-------- .../beetlsql/beetlcontroller.ftl | 14 ++--- .../code-generator/jpa/jpacontroller.ftl | 12 ++--- .../mybatis-plus/pluscontroller.ftl | 22 +++++--- .../src/main/resources/templates/index.ftl | 7 +++ 8 files changed, 73 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index faf9ed0..bcd81e4 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ SpringBootCodeGenerator CSDN博客 http://blog.csdn.net/moshowgame 更新日期 更新内容 +20190429新增返回封装工具类设置,优化对oracle注释comment on column的支持(感谢@liukex反馈),优化对普通和特殊storage关键字的判断(感谢@AhHeadFloating的反馈 )。 20190211提交gitignore,解决StringUtils.lowerCaseFirst潜在的NPE异常,校验修改为@RequestParam参数校验,lombok之@Data和@Slf4j优化,fix JdbcDAO模板类名显示为中文问题,WebMvcConfig整合MessageConverter,模板代码分类(感谢@liutf和@tfgzs的pull request)。 20190210实体生成规则切换为包装类型,不再采用基本数据类型,为实体类生成添加显示的默认构造方法(感谢@h2so的pull request)。 20190106修复处理number/decimal(x,x)类型的逻辑(感谢@arthaschan的反馈),修复JdbcTemplates模板两处错误(感谢@everflourish的反馈)。 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 2c4871d..3eaffa6 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 @@ -38,7 +38,8 @@ public class IndexController { public ReturnT> codeGenerate(String tableSql, //2019-2-10 liutf 修改为@RequestParam参数校验 @RequestParam(required = false, defaultValue = "大狼狗") String authorName, - @RequestParam(required = false, defaultValue = "com.softdev.system")String packageName + @RequestParam(required = false, defaultValue = "com.softdev.system")String packageName, + @RequestParam(required = false, defaultValue = "ApiReturnUtil")String returnUtil ) { @@ -56,6 +57,7 @@ public class IndexController { params.put("classInfo", classInfo); params.put("authorName", authorName); params.put("packageName", packageName); + params.put("returnUtil", returnUtil); // result Map result = new HashMap(); diff --git a/generator-web/src/main/java/com/softdev/system/generator/entity/ReturnT.java b/generator-web/src/main/java/com/softdev/system/generator/entity/ReturnT.java index edc6bf8..7978362 100644 --- a/generator-web/src/main/java/com/softdev/system/generator/entity/ReturnT.java +++ b/generator-web/src/main/java/com/softdev/system/generator/entity/ReturnT.java @@ -14,8 +14,8 @@ public class ReturnT implements Serializable { public static final int SUCCESS_CODE = 200; public static final int FAIL_CODE = 500; - public static final ReturnT SUCCESS = new ReturnT(null); - public static final ReturnT FAIL = new ReturnT(FAIL_CODE, null); + public static final ReturnT SUCCESS = new ReturnT<>(null); + public static final ReturnT FAIL = new ReturnT<>(FAIL_CODE, null); private int code; private String msg; 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 50f253c..6488897 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 @@ -133,20 +133,25 @@ public class TableParseUtil { } String[] fieldLineList = fieldListTmp.split(","); if (fieldLineList.length > 0) { - int i=0;//i为了解决primary key关键字出现的地方,出现在前3行,一般和id有关 + int i=0; + //i为了解决primary key关键字出现的地方,出现在前3行,一般和id有关 for (String columnLine :fieldLineList) { i++; columnLine = columnLine.replaceAll("\n","").replaceAll("\t","").trim(); // `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', // 2018-9-18 zhengk 修改为contains,提升匹配率和匹配不按照规矩出牌的语句 // 2018-11-8 zhengkai 修复tornadoorz反馈的KEY FK_permission_id (permission_id),KEY FK_role_id (role_id)情况 - if (!columnLine.contains("key ")&&!columnLine.contains("constraint")&&!columnLine.contains("using")&&!columnLine.contains("unique") - &&!columnLine.contains("storage")&&!columnLine.contains("pctincrease") + // 2019-2-22 zhengkai 要在条件中使用复杂的表达式 + // 2019-4-29 zhengkai 优化对普通和特殊storage关键字的判断(感谢@AhHeadFloating的反馈 ) + boolean specialFlag=(!columnLine.contains("key ")&&!columnLine.contains("constraint")&&!columnLine.contains("using")&&!columnLine.contains("unique") + &&!(columnLine.contains("primary")&&columnLine.indexOf("storage")+3>columnLine.indexOf("(")) + &&!columnLine.contains("pctincrease") &&!columnLine.contains("buffer_pool")&&!columnLine.contains("tablespace") - &&!(columnLine.contains("primary")&&i>3)){ + &&!(columnLine.contains("primary")&&i>3)); + if (specialFlag){ //如果是oracle的number(x,x),可能出现最后分割残留的,x),这里做排除处理 - if(columnLine.length()<5) continue; + if(columnLine.length()<5) {continue;} //2018-9-16 zhengkai 支持'符号以及空格的oracle语句// userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', String columnName = ""; columnLine=columnLine.replaceAll("`"," ").replaceAll("\""," ").replaceAll("'","").replaceAll(" "," ").trim(); @@ -160,7 +165,8 @@ public class TableParseUtil { } // field class - columnLine = columnLine.substring(columnLine.indexOf("`")+1).trim(); // int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + columnLine = columnLine.substring(columnLine.indexOf("`")+1).trim(); + // int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', String fieldClass = Object.class.getSimpleName(); //2018-9-16 zhengk 补充char/clob/blob/json等类型,如果类型未知,默认为String //2018-11-22 lshz0088 处理字段类型的时候,不严谨columnLine.contains(" int") 类似这种的,可在前后适当加一些空格之类的加以区分,否则当我的字段包含这些字符的时候,产生类型判断问题。 @@ -192,8 +198,10 @@ public class TableParseUtil { // //number(20) fanwei["20"] //如果括号里是1位或者2位且第二位为0,则进行特殊处理。只有有小数位,都设置为BigDecimal。 if((fanwei.length>1&&"0".equals(fanwei[1]))||fanwei.length==1){ - int length=Integer.valueOf(fanwei[0]); - if(fanwei.length>1) length=Integer.valueOf(fanwei[1]); + int length=Integer.parseInt(fanwei[0]); + if(fanwei.length>1) { + length=Integer.valueOf(fanwei[1]); + } //数字范围9位及一下用Integer,大的用Long if(length<=9){ fieldClass = Integer.class.getSimpleName(); @@ -213,8 +221,23 @@ public class TableParseUtil { // field comment,MySQL的一般位于field行,而pgsql和oralce多位于后面。 String fieldComment = null; - if (columnLine.contains("comment")) { - String commentTmp = columnLine.substring(columnLine.indexOf("comment")+7).trim(); // '用户ID', + if(tableSql.contains("comment on column")&&(tableSql.contains("."+columnName+" is ")||tableSql.contains(".`"+columnName+"` is"))){ + //新增对pgsql/oracle的字段备注支持 + //COMMENT ON COLUMN public.check_info.check_name IS '检查者名称'; + //2018-11-22 lshz0088 正则表达式的点号前面应该加上两个反斜杠,否则会认为是任意字符 + //2019-4-29 zhengkai 优化对oracle注释comment on column的支持(@liukex) + tableSql=tableSql.replaceAll(".`"+columnName+"` is","."+columnName+" is"); + Matcher columnCommentMatcher = Pattern.compile("\\."+columnName+" is `").matcher(tableSql); + fieldComment=columnName; + while(columnCommentMatcher.find()){ + String columnCommentTmp = columnCommentMatcher.group(); + System.out.println(columnCommentTmp); + fieldComment = tableSql.substring(tableSql.indexOf(columnCommentTmp)+columnCommentTmp.length()).trim(); + fieldComment = fieldComment.substring(0,fieldComment.indexOf("`")).trim(); + } + }else if (columnLine.contains("comment")) { + String commentTmp = columnLine.substring(columnLine.indexOf("comment")+7).trim(); + // '用户ID', if (commentTmp.contains("`") || commentTmp.indexOf("`")!=commentTmp.lastIndexOf("`")) { commentTmp = commentTmp.substring(commentTmp.indexOf("`")+1, commentTmp.lastIndexOf("`")); } @@ -223,17 +246,6 @@ public class TableParseUtil { commentTmp = commentTmp.substring(0, commentTmp.lastIndexOf(")")+1); } fieldComment = commentTmp; - }else if(tableSql.contains("comment on column")&&tableSql.contains("."+columnName+" is `")){ - //新增对pgsql/oracle的字段备注支持 - //COMMENT ON COLUMN public.check_info.check_name IS '检查者名称'; - //2018-11-22 lshz0088 正则表达式的点号前面应该加上两个反斜杠,否则会认为是任意字符 - Matcher columnCommentMatcher = Pattern.compile("\\."+columnName+" is `").matcher(tableSql); // "\\{(.*?)\\}" - while(columnCommentMatcher.find()){ - String columnCommentTmp = columnCommentMatcher.group(); - System.out.println(columnCommentTmp); - fieldComment = tableSql.substring(tableSql.indexOf(columnCommentTmp)+columnCommentTmp.length()).trim(); - fieldComment = fieldComment.substring(0,fieldComment.indexOf("`")).trim(); - } }else{ //修复comment不存在导致报错的问题 fieldComment = columnName; diff --git a/generator-web/src/main/resources/templates/code-generator/beetlsql/beetlcontroller.ftl b/generator-web/src/main/resources/templates/code-generator/beetlsql/beetlcontroller.ftl index 1410985..f8b6736 100644 --- a/generator-web/src/main/resources/templates/code-generator/beetlsql/beetlcontroller.ftl +++ b/generator-web/src/main/resources/templates/code-generator/beetlsql/beetlcontroller.ftl @@ -25,10 +25,10 @@ public class ${classInfo.className}Controller { ${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,${classInfo.className?uncap_first}.getId()); if(${classInfo.className?uncap_first}!=null){ sqlManager.updateById(${classInfo.className?uncap_first}); - return ApiReturnUtil.success("编辑成功"); + return ${returnUtil}.success("编辑成功"); }else{ sqlManager.insert(${classInfo.className?uncap_first}); - return ApiReturnUtil.error("保存成功"); + return ${returnUtil}.error("保存成功"); } } @@ -40,9 +40,9 @@ public class ${classInfo.className}Controller { ${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id); if(${classInfo.className?uncap_first}!=null){ sqlManager.deleteById(id); - return ApiReturnUtil.success("删除成功"); + return ${returnUtil}.success("删除成功"); }else{ - return ApiReturnUtil.error("没有找到该对象"); + return ${returnUtil}.error("没有找到该对象"); } } @@ -53,9 +53,9 @@ public class ${classInfo.className}Controller { public Object find(int id){ ${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id); if(${classInfo.className?uncap_first}!=null){ - return ApiReturnUtil.success(${classInfo.className?uncap_first}); + return ${returnUtil}.success(${classInfo.className?uncap_first}); }else{ - return ApiReturnUtil.error("没有找到该对象"); + return ${returnUtil}.error("没有找到该对象"); } } @@ -67,7 +67,7 @@ public class ${classInfo.className}Controller { @RequestParam(required = false, defaultValue = "0") int pageNumber, @RequestParam(required = false, defaultValue = "10") int pageSize) { List<${classInfo.className}> list = sqlManager.query(${classInfo.className}.class).select(); - return ApiReturnUtil.error(list); + return ${returnUtil}.success(list); } } diff --git a/generator-web/src/main/resources/templates/code-generator/jpa/jpacontroller.ftl b/generator-web/src/main/resources/templates/code-generator/jpa/jpacontroller.ftl index baa53ca..59975ce 100644 --- a/generator-web/src/main/resources/templates/code-generator/jpa/jpacontroller.ftl +++ b/generator-web/src/main/resources/templates/code-generator/jpa/jpacontroller.ftl @@ -36,27 +36,27 @@ public class ${classInfo.className}Controller { /** * 删除 */ - @GetMapping("/delete") + @PostMapping("/delete") public Object delete(int id){ Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id); if(${classInfo.className?uncap_first}.isPresent()){ ${classInfo.className?uncap_first}Repository.deleteById(id); - return ApiReturnUtil.success("删除成功"); + return ${returnUtil}.success("删除成功"); }else{ - return ApiReturnUtil.error("没有找到该对象"); + return ${returnUtil}.error("没有找到该对象"); } } /** * 查询 */ - @GetMapping("/find") + @PostMapping("/find") public Object find(int id){ Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id); if(${classInfo.className?uncap_first}.isPresent()){ - return ApiReturnUtil.success(${classInfo.className?uncap_first}.get()); + return ${returnUtil}.success(${classInfo.className?uncap_first}.get()); }else{ - return ApiReturnUtil.error("没有找到该对象"); + return ${returnUtil}.error("没有找到该对象"); } } diff --git a/generator-web/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl b/generator-web/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl index 01515ec..f6c517f 100644 --- a/generator-web/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl +++ b/generator-web/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl @@ -26,32 +26,38 @@ public class ${classInfo.className}Controller { */ @PostMapping("/save") public Object save(${classInfo.className} ${classInfo.className?uncap_first}){ - return ${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first}); + ${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id)) + if(${classInfo.className?uncap_first}!=null){ + ${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first}); + }else{ + ${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first}); + } + return ${returnUtil}.success(${classInfo.className?uncap_first}); } /** * 删除 */ - @GetMapping("/delete") + @PostMapping("/delete") public Object delete(int id){ ${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id)) if(${classInfo.className?uncap_first}!=null){ - return ApiReturnUtil.success(${classInfo.className?uncap_first}); + return ${returnUtil}.success(${classInfo.className?uncap_first}); }else{ - return ApiReturnUtil.error("没有找到该对象"); + return ${returnUtil}.error("没有找到该对象"); } } /** * 查询 */ - @GetMapping("/find") + @PostMapping("/find") public Object find(int id){ ${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id)) if(${classInfo.className?uncap_first}!=null){ - return ApiReturnUtil.success(${classInfo.className?uncap_first}); + return ${returnUtil}.success(${classInfo.className?uncap_first}); }else{ - return ApiReturnUtil.error("没有找到该对象"); + return ${returnUtil}.error("没有找到该对象"); } } @@ -69,7 +75,7 @@ public class ${classInfo.className}Controller { //执行分页 IPage<${classInfo.className}> pageList = certPersonMapper.selectPage(page, queryWrapperw); //返回结果 - return ApiReturnUtil.success(pageList); + return ${returnUtil}.success(pageList); } } diff --git a/generator-web/src/main/resources/templates/index.ftl b/generator-web/src/main/resources/templates/index.ftl index 8104b6b..226ace0 100644 --- a/generator-web/src/main/resources/templates/index.ftl +++ b/generator-web/src/main/resources/templates/index.ftl @@ -51,6 +51,7 @@ data: { "tableSql": tableSql, "packageName":$("#packageName").val(), + "returnUtil":$("#returnUtil").val(), "authorName":$("#authorName").val() }, dataType: "json", @@ -118,6 +119,12 @@ +
+
+ 返回封装 +
+ +