Skip to content

Commit e68c292

Browse files
committed
fix up the bug when the comment has special things.
1 parent 5c65251 commit e68c292

4 files changed

Lines changed: 13 additions & 6 deletions

File tree

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ SpringBootCodeGenerator
88
----
99
基于SpringBoot2+Freemarker的代码生成器,用DDL SQL语句生成JPA/JdbcTemplate/Mybatis/BeetlSQL相关代码,支持mysql/oracle/pgsql三大数据库。目前以JPA的为主,各大模板也在陆续优化。欢迎大家提交模板和交流想法!
1010
<br><br>
11-
另外,感谢bejson三叔将他部署在http://java.bejson.com/generator上
11+
另外,感谢bejson三叔将他部署在http://java.bejson.com/generator上,成为besjon专供工具。
1212
<br><br>
1313
<table><tbody>
1414
<tr><td>访问路径</td> <td>http://127.0.0.1:1234/generator</td></tr>
1515
<tr><td>在线地址</td> <td>http://java.bejson.com/generator</td></tr>
1616
<tr><td>CSDN博客</td> <td>http://blog.csdn.net/moshowgame</td></tr>
1717
<tr><td></td> <td></td></tr>
1818
<tr><td>更新日期</td> <td>更新内容</td></tr>
19-
<tr><td>20180926<td>全新BeetlSQL模块,以及一些小细节优化。</td></tr>
19+
<tr><td>20180927<td>优化COMMENT提取逻辑,支持多种复杂情况的注释(感谢@raodeming的反馈)。</td></tr>
20+
<tr><td>20180926<td>全新BeetlSQL模块,以及一些小细节优化(感谢@三叔同事的建议)。</td></tr>
2021
<tr><td>20180925<td>优化SQL表和字段备注的推断,包括pgsql/oralce的comment on column/table情况处理等。</td></tr>
2122
<tr><td>20180918<td>优化SQL类型推断。优化PrimaryKey判断。修复jpacontroller中Repository拼写错误问题。</td></tr>
2223
<tr><td>20180917<td>全新首页,静态文件全部采用CDN。新增jdbcTemplate模块。</td></tr>

codegenerator1.png

-34.5 KB
Binary file not shown.

codegenerator2.png

-14.5 KB
Binary file not shown.

generator-web/src/main/java/com/softdev/system/generator/util/TableParseUtil.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,21 @@ public static ClassInfo processTableIntoClassInfo(String tableSql) throws IOExce
9393
//修复表备注为空问题
9494
classComment = tableName;
9595
}
96-
96+
//如果备注跟;混在一起,需要替换掉
97+
classComment=classComment.replaceAll(";","");
9798
// field List
9899
List<FieldInfo> fieldList = new ArrayList<FieldInfo>();
99100

100101
// 正常( ) 内的一定是字段相关的定义。
101102
String fieldListTmp = tableSql.substring(tableSql.indexOf("(")+1, tableSql.lastIndexOf(")"));
102103

103104
// 匹配 comment,替换备注里的小逗号, 防止不小心被当成切割符号切割
104-
Matcher matcher = Pattern.compile("\\ comment '(.*?)\\'").matcher(fieldListTmp); // "\\{(.*?)\\}"
105+
Matcher matcher = Pattern.compile("\\ comment `(.*?)\\`").matcher(fieldListTmp); // "\\{(.*?)\\}"
105106
while(matcher.find()){
106107

107108
String commentTmp = matcher.group();
108-
commentTmp = commentTmp.replaceAll("\\ comment '|\\'", ""); // "\\{|\\}"
109+
//2018-9-27 zhengk 不替换,只处理,支持COMMENT评论里面多种注释
110+
//commentTmp = commentTmp.replaceAll("\\ comment `|\\`", " "); // "\\{|\\}"
109111

110112
if (commentTmp.contains(",")) {
111113
String commentTmpFinal = commentTmp.replaceAll(",", ",");
@@ -122,7 +124,7 @@ public static ClassInfo processTableIntoClassInfo(String tableSql) throws IOExce
122124
columnLine = columnLine.replaceAll("\n","").replaceAll("\t","").trim();
123125
// `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
124126
// 2018-9-18 zhengk 修改为contains,提升匹配率和匹配不按照规矩出牌的语句
125-
if (!columnLine.contains("constraint")&&!columnLine.contains("using")
127+
if (!columnLine.contains("constraint")&&!columnLine.contains("using")&&!columnLine.contains("unique")
126128
&&!columnLine.contains("storage")&&!columnLine.contains("pctincrease")
127129
&&!columnLine.contains("buffer_pool")&&!columnLine.contains("tablespace")
128130
&&!(columnLine.contains("primary")&&i>3)){
@@ -171,6 +173,10 @@ public static ClassInfo processTableIntoClassInfo(String tableSql) throws IOExce
171173
if (commentTmp.contains("`") || commentTmp.indexOf("`")!=commentTmp.lastIndexOf("`")) {
172174
commentTmp = commentTmp.substring(commentTmp.indexOf("`")+1, commentTmp.lastIndexOf("`"));
173175
}
176+
//解决最后一句是评论,无主键且连着)的问题:album_id int(3) default '1' null comment '相册id:0 代表头像 1代表照片墙')
177+
if(commentTmp.contains(")")){
178+
commentTmp = commentTmp.substring(0, commentTmp.lastIndexOf(")"));
179+
}
174180
fieldComment = commentTmp;
175181
}else if(tableSql.contains("comment on column")&&tableSql.contains("."+columnName+" is `")){
176182
//新增对pgsql/oracle的字段备注支持

0 commit comments

Comments
 (0)