diff --git a/README.md b/README.md index 3da3030..1b0aa55 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ -![image](https://img.shields.io/badge/SpringBoot-%E2%98%85%E2%98%85%E2%98%85-green.svg) -![image](https://img.shields.io/badge/CodeGenerator-%E2%98%85%E2%98%85%E2%98%85-green.svg) +![image](https://img.shields.io/badge/SpringBoot2-%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-brightgreen.svg) +![image](https://img.shields.io/badge/Freemarker-%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-brightgreen.svg) +![image](https://img.shields.io/badge/CodeGenerator-%E2%98%85%E2%98%85%E2%98%85%E2%98%85%E2%98%85-brightgreen.svg) +[![Build Status](https://travis-ci.org/moshowgame/SpringBootCodeGenerator.svg?branch=master)](https://travis-ci.org/moshowgame/SpringBootCodeGenerator) +
+ SpringBootCodeGenerator ---- -基于SpringBoot2+xxl-codegenerator的代码生成器。用DDL语句生成JPA/JdbcTemplate/Mybatis相关代码,目前以JPA的为主,各大模板也在陆续优化。 +基于SpringBoot2+Freemarker的代码生成器。用DDL语句生成JPA/JdbcTemplate/Mybatis相关代码,目前以JPA的为主,各大模板也在陆续优化。

感谢bejson三叔将他部署在http://java.bejson.com/generator上

@@ -12,6 +16,7 @@ SpringBootCodeGenerator CSDN博客 http://blog.csdn.net/moshowgame 更新日期 更新内容 +20180918优化SQL类型推断。优化PrimaryKey判断。修复jpacontroller中Repository拼写错误问题。 20180917全新首页,静态文件全部采用CDN。新增jdbcTemplate模块。 20180916-2优化oracle支持,优化DDL语句中"或者'或者空格的支持。 20180916-1补充char/clob/blob/json等类型,如果类型未知,默认为String。 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 46357af..8c58c34 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 @@ -102,12 +102,16 @@ public class TableParseUtil { String[] fieldLineList = fieldListTmp.split(","); if (fieldLineList.length > 0) { + int i=0;//i为了解决primary key关键字出现的地方,出现在前3行,一般和id有关 for (String columnLine :fieldLineList) { - columnLine = columnLine.replaceAll("\n","").replaceAll("\t","").trim(); // `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + i++; + columnLine = columnLine.replaceAll("\n","").replaceAll("\t","").trim(); + // `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', + // 2018-9-18 zhengk 修改为contains,提升匹配率和匹配不按照规矩出牌的语句 if (!columnLine.contains("constraint")&&!columnLine.contains("using") &&!columnLine.contains("storage")&&!columnLine.contains("pctincrease") &&!columnLine.contains("buffer_pool")&&!columnLine.contains("tablespace") - &&!columnLine.contains("primary")){ + &&!(columnLine.contains("primary")&&i>3)){ //如果是oracle的number(x,x),可能出现最后分割残留的,x),这里做排除处理 if(columnLine.length()<5) continue; @@ -127,20 +131,20 @@ public class TableParseUtil { 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 - if (columnLine.startsWith("int") || columnLine.startsWith("tinyint") || columnLine.startsWith("smallint")) { + if (columnLine.contains("int") || columnLine.contains("tinyint") || columnLine.contains("smallint")) { fieldClass = Integer.TYPE.getSimpleName(); - } else if (columnLine.startsWith("bigint")) { + } else if (columnLine.contains("bigint")) { fieldClass = Long.TYPE.getSimpleName(); - } else if (columnLine.startsWith("float")) { + } else if (columnLine.contains("float")) { fieldClass = Float.TYPE.getSimpleName(); - } else if (columnLine.startsWith("double")) { + } else if (columnLine.contains("double")) { fieldClass = Double.TYPE.getSimpleName(); - } else if (columnLine.startsWith("datetime") || columnLine.startsWith("timestamp")) { + } else if (columnLine.contains("datetime") || columnLine.contains("timestamp")) { fieldClass = Date.class.getSimpleName(); - } else if (columnLine.startsWith("varchar") || columnLine.startsWith("text")|| columnLine.startsWith("char") - || columnLine.startsWith("clob")||columnLine.startsWith("blob")||columnLine.startsWith("json")) { + } else if (columnLine.contains("varchar") || columnLine.contains("text")|| columnLine.contains("char") + || columnLine.contains("clob")||columnLine.contains("blob")||columnLine.contains("json")) { fieldClass = String.class.getSimpleName(); - } else if (columnLine.startsWith("decimal")||columnLine.startsWith("number")) { + } else if (columnLine.contains("decimal")||columnLine.contains("number")) { fieldClass = BigDecimal.class.getSimpleName(); } else { fieldClass = String.class.getSimpleName(); diff --git a/generator-web/src/main/resources/templates/xxl-code-generator/jpacontroller.ftl b/generator-web/src/main/resources/templates/xxl-code-generator/jpacontroller.ftl index 7d00a29..6b7e7eb 100644 --- a/generator-web/src/main/resources/templates/xxl-code-generator/jpacontroller.ftl +++ b/generator-web/src/main/resources/templates/xxl-code-generator/jpacontroller.ftl @@ -19,14 +19,14 @@ import java.util.Map; public class ${classInfo.className}Controller { @Autowired - private ${classInfo.className}Respository ${classInfo.className?uncap_first}Respository; + private ${classInfo.className}Repository ${classInfo.className?uncap_first}Repository; /** * 新增或编辑 */ @PostMapping("/save") public Object save(${classInfo.className} ${classInfo.className?uncap_first}){ - return ${classInfo.className?uncap_first}Respository.save(${classInfo.className?uncap_first}); + return ${classInfo.className?uncap_first}Repository.save(${classInfo.className?uncap_first}); } /** @@ -34,9 +34,9 @@ public class ${classInfo.className}Controller { */ @GetMapping("/delete") public Object delete(int id){ - Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Respository.findById(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}Respository.deleteById(id); + ${classInfo.className?uncap_first}Repository.deleteById(id); return ApiReturnUtil.success("删除成功"); }else{ return ApiReturnUtil.error("没有找到该对象"); @@ -48,7 +48,7 @@ public class ${classInfo.className}Controller { */ @GetMapping("/find") public Object load(int id){ - Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Respository.findById(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()); }else{ @@ -72,7 +72,7 @@ public class ${classInfo.className}Controller { //分页构造 Pageable pageable = PageRequest.of(pageNumber,pageSize); - return ${classInfo.className?uncap_first}Respository.findAll(example, pageable); + return ${classInfo.className?uncap_first}Repository.findAll(example, pageable); } }