| 访问路径 | http://127.0.0.1:1234/generator |
| 在线地址 | http://java.bejson.com/generator |
-| CSDN博客 | http://blog.csdn.net/moshowgame |
+| CSDN博客 | http://zhengkai.blog.csdn.net |
| |
| 更新日期 | 更新内容 |
+| 20191115 | 1.添加tinyint类型转换(感谢@lixiliang&@liujiansgit的Suggestion) 2.添加一键复制功能(感谢@gaohanghang的Suggestion) 3.Mybatis的insert增加keyProperty="id"用于返回自增id(感谢@88888888888888888888的Suggestion) 4.优化date类型的支持(感谢@SteveLsf的反馈) 5.其他一些优化. |
| 20191015 | 修复jdbcTemplates中insert语句第一个字段丢失的问题。 |
-| 20190915 | 1.添加对象getset模板 2.添加sql模板 3.启动类添加日志输出,方便项目使用(感谢@gaohanghang 的pull request) |
+| 20190915 | 1.添加对象getset模板 2.添加sql模板 3.启动类添加日志输出,方便项目使用(感谢@gaohanghang 的pull request) |
| 20190910-2 | 优化以及更新Maven依赖,减少打包体积。 |
-| 20190910-1 | 1.修复mapper接口load方法,但是xml中方法不匹配问题 2.移除mapper中CRUD时的@param 注解,会影响xml的解析(感谢@caojiantao的反馈)。3.优化MyBatis的xml文件对Oracle的支持。(感谢@wylove1992的反馈) 4.新增对boolean的处理(感谢@violinxsc的反馈)以及优化tinyint类型生成boolean类型问题(感谢@hahaYhui的反馈) |
-| 20190909 | 添加是否下划线转换为驼峰的选择(感谢@youngking28 的pull request)。 |
-| 20190518 | 1.优化注释 2.修改 mybatis模板中 controller注解 3.修改 mybatis模板中 dao文件使用为 mapper文件 4.修改 mybatis模板中 service实现类中的一个 bug 5.修改 index.ftl文件中 mybatis模板的 dao -> mapper(感谢@unqin的pull request) |
-| 20190511 | 优化mybatis模块的dao和xml模板,修改dao接口注解为@Repository,所有dao参数改为包装类,删除update语句最后的UpdateTime = NOW(),修改dao接口文件的方法注释使其更符合javaDoc的标准,修改insert语句增加插入行主键的返回,修改load的方法名为selectByPrimaryKey,修改xml的update语句新增动态if判空,修改xml的insert语句新增动态插入判空,更符合mybatisGenerator标准(感谢@Archer-Wen的贡献 )。 |
-| 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的反馈)。 |
-| 20181212 | 首页UI优化,新增MybatisPlus模块(感谢@三叔同事的建议),修复作者名和包名获取失败问题(感谢@Yanch1994的反馈)。 |
-| 20181122 | 优化正则表达式点号的处理,优化处理字段类型,对number类型增加int,long,BigDecimal的区分判断(感谢@lshz0088的指导)。 |
-| 20181108 | 修复非字段描述"KEY FK_xxxx (xxxx)"导致生成KEY字段情况(感谢@tornadoorz反馈)。 |
-| 20181018 | 支持double(x,x)的类型,以及comment里面包含一些特殊字符的处理(感谢@tanwubo的反馈)。 |
+| 20190910-1 | 1.修复mapper接口load方法,但是xml中方法不匹配问题 2.移除mapper中CRUD时的@param 注解,会影响xml的解析(感谢@caojiantao的反馈)。3.优化MyBatis的xml文件对Oracle的支持。(感谢@wylove1992的反馈) 4.新增对boolean的处理(感谢@violinxsc的反馈)以及优化tinyint类型生成boolean类型问题(感谢@hahaYhui的反馈) |
+| 20190909 | 添加是否下划线转换为驼峰的选择(感谢@youngking28 的pull request)。 |
+| 20190518 | 1.优化注释 2.修改 mybatis模板中 controller注解 3.修改 mybatis模板中 dao文件使用为 mapper文件 4.修改 mybatis模板中 service实现类中的一个 bug 5.修改 index.ftl文件中 mybatis模板的 dao -> mapper(感谢@unqin的pull request) |
+| 20190511 | 优化mybatis模块的dao和xml模板,修改dao接口注解为@Repository,所有dao参数改为包装类,删除update语句最后的UpdateTime = NOW(),修改dao接口文件的方法注释使其更符合javaDoc的标准,修改insert语句增加插入行主键的返回,修改load的方法名为selectByPrimaryKey,修改xml的update语句新增动态if判空,修改xml的insert语句新增动态插入判空,更符合mybatisGenerator标准(感谢@Archer-Wen的贡献 )。 |
+| 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的反馈)。 |
+| 20181212 | 首页UI优化,新增MybatisPlus模块(感谢@三叔同事的建议),修复作者名和包名获取失败问题(感谢@Yanch1994的反馈)。 |
+| 20181122 | 优化正则表达式点号的处理,优化处理字段类型,对number类型增加int,long,BigDecimal的区分判断(感谢@lshz0088的指导)。 |
+| 20181108 | 修复非字段描述"KEY FK_xxxx (xxxx)"导致生成KEY字段情况(感谢@tornadoorz反馈)。 |
+| 20181018 | 支持double(x,x)的类型,以及comment里面包含一些特殊字符的处理(感谢@tanwubo的反馈)。 |
| 20181010 | CDN变更,修复CDN不稳定导致网页js报错问题。 |
| 20181003 | 新增element-ui/bootstrap生成。 |
| 20181002 | 修复公共CDN之Layer.js404问题,导致项目无法生成。 |
-| 20180927 | 优化COMMENT提取逻辑,支持多种复杂情况的注释(感谢@raodeming的反馈)。 |
-| 20180926 | 全新BeetlSQL模块,以及一些小细节优化(感谢@三叔同事的建议)。 |
+| 20180927 | 优化COMMENT提取逻辑,支持多种复杂情况的注释(感谢@raodeming的反馈)。 |
+| 20180926 | 全新BeetlSQL模块,以及一些小细节优化(感谢@三叔同事的建议)。 |
| 20180925 | 优化SQL表和字段备注的推断,包括pgsql/oralce的comment on column/table情况处理等。 |
| 20180918 | 优化SQL类型推断。优化PrimaryKey判断。修复jpacontroller中Repository拼写错误问题。 |
| 20180917 | 全新首页,静态文件全部采用CDN。新增jdbcTemplate模块。 |
@@ -61,6 +62,5 @@ SpringBootCodeGenerator
-
-
+
diff --git a/codegenerator1.png b/codegenerator1.png
index da53f3f..ad0fdbc 100644
Binary files a/codegenerator1.png and b/codegenerator1.png differ
diff --git a/codegenerator2.png b/codegenerator2.png
index baef35c..9e447a9 100644
Binary files a/codegenerator2.png and b/codegenerator2.png differ
diff --git a/codegenerator3.png b/codegenerator3.png
index 4988787..38fa897 100644
Binary files a/codegenerator3.png and b/codegenerator3.png differ
diff --git a/codegenerator4.png b/codegenerator4.png
deleted file mode 100644
index b77ec46..0000000
Binary files a/codegenerator4.png and /dev/null differ
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 6f844dd..ce0e79c 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
@@ -2,8 +2,8 @@ package com.softdev.system.generator.controller;
import com.softdev.system.generator.entity.ClassInfo;
import com.softdev.system.generator.entity.ReturnT;
-import com.softdev.system.generator.util.CodeGeneratorTool;
import com.softdev.system.generator.util.FreemarkerTool;
+import com.softdev.system.generator.util.TableParseUtil;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -40,8 +40,9 @@ public class IndexController {
@RequestParam(required = false, defaultValue = "大狼狗") String authorName,
@RequestParam(required = false, defaultValue = "com.softdev.system")String packageName,
@RequestParam(required = false, defaultValue = "ApiReturnUtil")String returnUtil,
- @RequestParam(required = false, defaultValue = "true")boolean isUnderLineToCamelCase
- ) {
+ @RequestParam(required = false, defaultValue = "true")boolean isUnderLineToCamelCase,
+ @RequestParam(required = false, defaultValue = "boolean")String tinyintTransType
+ ) {
try {
@@ -51,17 +52,17 @@ public class IndexController {
}
// parse table
- ClassInfo classInfo = CodeGeneratorTool.processTableIntoClassInfo(tableSql, isUnderLineToCamelCase);
+ ClassInfo classInfo = TableParseUtil.processTableIntoClassInfo(tableSql, isUnderLineToCamelCase, tinyintTransType);
// code genarete
- Map params = new HashMap();
+ Map params = new HashMap(8);
params.put("classInfo", classInfo);
params.put("authorName", authorName);
params.put("packageName", packageName);
params.put("returnUtil", returnUtil);
// result
- Map result = new HashMap();
+ Map result = new HashMap(32);
//UI
result.put("swagger-ui", freemarkerTool.processString("code-generator/ui/swagger-ui.ftl", params));
diff --git a/generator-web/src/main/java/com/softdev/system/generator/util/CodeGeneratorTool.java b/generator-web/src/main/java/com/softdev/system/generator/util/CodeGeneratorTool.java
deleted file mode 100644
index 3ef76f2..0000000
--- a/generator-web/src/main/java/com/softdev/system/generator/util/CodeGeneratorTool.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.softdev.system.generator.util;
-
-
-
-import com.softdev.system.generator.entity.ClassInfo;
-
-import java.io.IOException;
-
-/**
- * code generate tool
- *
- * @author xuxueli 2018-04-25 16:29:58
- */
-public class CodeGeneratorTool {
-
- /**
- * process Table Into ClassInfo
- *
- * @param tableSql
- * @return
- */
- public static ClassInfo processTableIntoClassInfo(String tableSql, boolean isUnderLineToCamelCase) throws IOException {
- return TableParseUtil.processTableIntoClassInfo(tableSql, isUnderLineToCamelCase);
- }
-
-}
\ No newline at end of file
diff --git a/generator-web/src/main/java/com/softdev/system/generator/util/FreemarkerUtil.java b/generator-web/src/main/java/com/softdev/system/generator/util/FreemarkerUtil.java
index 1377f9a..d281a1e 100644
--- a/generator-web/src/main/java/com/softdev/system/generator/util/FreemarkerUtil.java
+++ b/generator-web/src/main/java/com/softdev/system/generator/util/FreemarkerUtil.java
@@ -4,8 +4,7 @@ import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.IOException;
@@ -18,8 +17,8 @@ import java.util.Map;
*
* @author xuxueli 2018-05-02 19:56:00
*/
+@Slf4j
public class FreemarkerUtil {
- private static final Logger logger = LoggerFactory.getLogger(CodeGeneratorTool.class);
/**
* freemarker config
@@ -40,7 +39,7 @@ public class FreemarkerUtil {
freemarkerConfig.setLocale(Locale.CHINA);
freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
} catch (IOException e) {
- logger.error(e.getMessage(), e);
+ log.error(e.getMessage(), e);
}
}
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 b796a70..cd1fb15 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
@@ -24,7 +24,8 @@ public class TableParseUtil {
* @param tableSql
* @return
*/
- public static ClassInfo processTableIntoClassInfo(String tableSql, boolean isUnderLineToCamelCase) throws IOException {
+ public static ClassInfo processTableIntoClassInfo(String tableSql, boolean isUnderLineToCamelCase,String tinyintTransType)
+ throws IOException {
if (tableSql==null || tableSql.trim().length()==0) {
throw new CodeGenerateException("Table structure can not be empty.");
}
@@ -41,7 +42,9 @@ public class TableParseUtil {
}
//新增处理create table if not exists members情况
- if (tableName.contains("if not exists")) tableName=tableName.replaceAll("if not exists","");
+ if (tableName.contains("if not exists")) {
+ tableName=tableName.replaceAll("if not exists","");
+ }
if (tableName.contains("`")) {
tableName = tableName.substring(tableName.indexOf("`")+1, tableName.lastIndexOf("`"));
@@ -101,20 +104,22 @@ public class TableParseUtil {
String fieldListTmp = tableSql.substring(tableSql.indexOf("(")+1, tableSql.lastIndexOf(")"));
// 匹配 comment,替换备注里的小逗号, 防止不小心被当成切割符号切割
- Matcher matcher = Pattern.compile("comment `(.*?)\\`").matcher(fieldListTmp); // "\\{(.*?)\\}"
- while(matcher.find()){
+ String commentPattenStr1="comment `(.*?)\\`";
+ Matcher matcher1 = Pattern.compile(commentPattenStr1).matcher(fieldListTmp);
+ while(matcher1.find()){
- String commentTmp = matcher.group();
+ String commentTmp = matcher1.group();
//2018-9-27 zhengk 不替换,只处理,支持COMMENT评论里面多种注释
//commentTmp = commentTmp.replaceAll("\\ comment `|\\`", " "); // "\\{|\\}"
if (commentTmp.contains(",")) {
String commentTmpFinal = commentTmp.replaceAll(",", ",");
- fieldListTmp = fieldListTmp.replace(matcher.group(), commentTmpFinal);
+ fieldListTmp = fieldListTmp.replace(matcher1.group(), commentTmpFinal);
}
}
//2018-10-18 zhengkai 新增支持double(10, 2)等类型中有英文逗号的特殊情况
- Matcher matcher2 = Pattern.compile("\\`(.*?)\\`").matcher(fieldListTmp); // "\\{(.*?)\\}"
+ String commentPattenStr2="\\`(.*?)\\`";
+ Matcher matcher2 = Pattern.compile(commentPattenStr2).matcher(fieldListTmp);
while(matcher2.find()){
String commentTmp2 = matcher2.group();
if (commentTmp2.contains(",")) {
@@ -123,7 +128,8 @@ public class TableParseUtil {
}
}
//2018-10-18 zhengkai 新增支持double(10, 2)等类型中有英文逗号的特殊情况
- Matcher matcher3 = Pattern.compile("\\((.*?)\\)").matcher(fieldListTmp); // "\\{(.*?)\\}"
+ String commentPattenStr3="\\((.*?)\\)";
+ Matcher matcher3 = Pattern.compile(commentPattenStr3).matcher(fieldListTmp);
while(matcher3.find()){
String commentTmp3 = matcher3.group();
if (commentTmp3.contains(",")) {
@@ -148,7 +154,6 @@ public class TableParseUtil {
&&!columnLine.contains("pctincrease")
&&!columnLine.contains("buffer_pool")&&!columnLine.contains("tablespace")
&&!(columnLine.contains("primary")&&i>3));
-
if (specialFlag){
//如果是oracle的number(x,x),可能出现最后分割残留的,x),这里做排除处理
if(columnLine.length()<5) {continue;}
@@ -157,9 +162,8 @@ public class TableParseUtil {
columnLine=columnLine.replaceAll("`"," ").replaceAll("\""," ").replaceAll("'","").replaceAll(" "," ").trim();
//如果遇到username varchar(65) default '' not null,这种情况,判断第一个空格是否比第一个引号前
columnName = columnLine.substring(0, columnLine.indexOf(" "));
-
// field Name
-// 2019-09-08 yj 添加是否下划线转换为驼峰的判断
+ // 2019-09-08 yj 添加是否下划线转换为驼峰的判断
String fieldName;
if(isUnderLineToCamelCase){
fieldName = StringUtils.lowerCaseFirst(StringUtils.underlineToCamelCase(columnName));
@@ -184,7 +188,7 @@ public class TableParseUtil {
fieldClass = Float.class.getSimpleName();
} else if (columnLine.contains("double")) {
fieldClass = Double.class.getSimpleName();
- } else if (columnLine.contains("datetime") || columnLine.contains("timestamp")) {
+ } else if (columnLine.contains("time") || columnLine.contains("date") || columnLine.contains("datetime") || columnLine.contains("timestamp")) {
fieldClass = Date.class.getSimpleName();
} else if (columnLine.contains("varchar") || columnLine.contains(" text")|| columnLine.contains("char")
|| columnLine.contains("clob")||columnLine.contains("blob")||columnLine.contains("json")) {
@@ -221,9 +225,12 @@ public class TableParseUtil {
}else{
fieldClass = BigDecimal.class.getSimpleName();
}
- } else if (columnLine.contains("boolean")|| columnLine.contains("tinyint") ) {
+ } else if (columnLine.contains("boolean")) {
//20190910 MOSHOW.K.ZHENG 新增对boolean的处理(感谢@violinxsc的反馈)以及修复tinyint类型字段无法生成boolean类型问题(感谢@hahaYhui的反馈)
fieldClass = Boolean.class.getSimpleName();
+ } else if (columnLine.contains("tinyint") ) {
+ //20191115 MOSHOW.K.ZHENG 支持对tinyint的特殊处理
+ fieldClass=tinyintTransType;
} else {
fieldClass = String.class.getSimpleName();
}
diff --git a/generator-web/src/main/resources/templates/code-generator/mybatis/mybatis.ftl b/generator-web/src/main/resources/templates/code-generator/mybatis/mybatis.ftl
index c3312e0..4765b68 100644
--- a/generator-web/src/main/resources/templates/code-generator/mybatis/mybatis.ftl
+++ b/generator-web/src/main/resources/templates/code-generator/mybatis/mybatis.ftl
@@ -19,7 +19,7 @@
#if>
-
+
INSERT INTO ${classInfo.tableName}
<#if classInfo.fieldList?exists && classInfo.fieldList?size gt 0>
diff --git a/generator-web/src/main/resources/templates/common/common-import.ftl b/generator-web/src/main/resources/templates/common/common-import.ftl
index cb10e00..c307aae 100644
--- a/generator-web/src/main/resources/templates/common/common-import.ftl
+++ b/generator-web/src/main/resources/templates/common/common-import.ftl
@@ -8,13 +8,13 @@
-
+
-
+
-
+
-
+
@@ -28,33 +28,43 @@
#macro>
<#macro commonScript>
-
-
+
-
+
-
-
-
-
-
+
+
+
+
+
#macro>
<#macro commonFooter >
-
+
+
+
+#macro>
+
+<#macro viewerCounter>
+var _hmt = _hmt || [];
+(function() {
+ //百度统计一下
+ var hm = document.createElement("script");
+ hm.src = "https://hm.baidu.com/hm.js?97fd5ca1a4298ac8349c7e0de9029a0f";
+ var s = document.getElementsByTagName("script")[0];
+ s.parentNode.insertBefore(hm, s);
+})();
#macro>
\ No newline at end of file
diff --git a/generator-web/src/main/resources/templates/index.ftl b/generator-web/src/main/resources/templates/index.ftl
index 4389580..4195e2e 100644
--- a/generator-web/src/main/resources/templates/index.ftl
+++ b/generator-web/src/main/resources/templates/index.ftl
@@ -4,14 +4,17 @@
SQL转Java JPA、MYBATIS实现类代码生成平台
+
<#import "common/common-import.ftl" as netCommon>
<@netCommon.commonStyle />
-
<@netCommon.commonScript />
+
<#---->
@@ -110,7 +118,7 @@
BeJSON在线工具站
@@ -121,13 +129,20 @@
Spring Boot Code Generator!
- 基于SpringBoot2+Freemarker的代码生成器,用DDL SQL语句生成JPA/JdbcTemplate/Mybatis/MybatisPlus/BeetlSQL相关代码,支持mysql/oracle/pgsql三大数据库。以释放双手为目的,各大模板也在陆续补充和优化。欢迎大家多多提交模板和交流想法,如果发现有SQL语句不能识别,请留言给我分析,同时欢迎大家进行PullRequest和赞赏,谢谢!
+ √基于SpringBoot2+Freemarker的代码生成器,√以释放双手为目的,√支持mysql/oracle/pgsql三大数据库,
+ √用DDL-SQL语句生成JPA/JdbcTemplate/Mybatis/MybatisPlus/BeetlSQL相关代码。
+ 欢迎大家多多提交模板和交流想法,如果发现有SQL语句不能识别,请留言,同时欢迎大家提PR和点击赞赏,谢谢!
+
-
-
-
-
-
-
-
-
+ <@netCommon.commonFooter />