优化正则表达式点号的处理,优化处理字段类型,对number类型增加int,long,BigDecimal的区分判断(感谢@lshz0088的指导)

This commit is contained in:
moshowgame@126.com 2018-11-22 14:14:46 +08:00
parent 506c770a5d
commit 09836c1da5
4 changed files with 31 additions and 34 deletions

View File

@ -16,6 +16,7 @@ SpringBootCodeGenerator
<tr><td>CSDN博客</td> <td>http://blog.csdn.net/moshowgame</td></tr>
<tr><td></td> <td></td></tr>
<tr><td>更新日期</td> <td>更新内容</td></tr>
<tr><td>20181122<td>优化正则表达式点号的处理优化处理字段类型对number类型增加intlongBigDecimal的区分判断感谢@lshz0088的指导)。</td></tr>
<tr><td>20181108<td>修复非字段描述"KEY FK_xxxx (xxxx)"导致生成KEY字段情况感谢@tornadoorz反馈)。</td></tr>
<tr><td>20181018<td>支持double(x,x)的类型以及comment里面包含一些特殊字符的处理感谢@tanwubo的反馈)。</td></tr>
<tr><td>20181010<td>CDN变更修复CDN不稳定导致网页js报错问题。</td></tr>

View File

@ -90,7 +90,8 @@ public class IndexController {
}
}
logger.info("生成代码行数:{}", lineNum);
logger.info("生成代码数据:{}", result);
//测试环境可自行开启
//logger.info("生成代码数据:{}", result);
return new ReturnT<Map<String, String>>(result);
} catch (IOException | TemplateException e) {
logger.error(e.getMessage(), e);

View File

@ -164,7 +164,8 @@ 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.contains("int") || columnLine.contains("tinyint") || columnLine.contains("smallint")) {
//2018-11-22 lshz0088 处理字段类型的时候不严谨columnLine.contains(" int") 类似这种的可在前后适当加一些空格之类的加以区分否则当我的字段包含这些字符的时候产生类型判断问题
if (columnLine.contains(" int") || columnLine.contains("tinyint") || columnLine.contains("smallint")) {
fieldClass = Integer.TYPE.getSimpleName();
} else if (columnLine.contains("bigint")) {
fieldClass = Long.TYPE.getSimpleName();
@ -174,12 +175,32 @@ public class TableParseUtil {
fieldClass = Double.TYPE.getSimpleName();
} else if (columnLine.contains("datetime") || columnLine.contains("timestamp")) {
fieldClass = Date.class.getSimpleName();
} else if (columnLine.contains("varchar") || columnLine.contains("text")|| columnLine.contains("char")
} 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.contains("decimal")||columnLine.contains("number")) {
fieldClass = BigDecimal.class.getSimpleName();
} else {
} else if (columnLine.contains("decimal")||columnLine.contains(" number")) {
//2018-11-22 lshz0088 建议对number类型增加intlongBigDecimal的区分判断
//如果startKh大于等于0则表示有设置取值范围
int startKh=columnLine.indexOf("(");
if(startKh>=0){
int endKh=columnLine.indexOf(")",startKh);
String[] fanwei=columnLine.substring(startKh+1,endKh).split("");
if("0".equals(fanwei[1])){
//如果没有小数位数
int length=Integer.valueOf(fanwei[0]);
if(length<=9){
fieldClass = Integer.class.getSimpleName();
}else{
fieldClass = Long.class.getSimpleName();
}
}else{
//有小数位数一律使用BigDecimal
fieldClass = BigDecimal.class.getSimpleName();
}
}else{
fieldClass = BigDecimal.class.getSimpleName();
}
}else {
fieldClass = String.class.getSimpleName();
}
@ -198,7 +219,8 @@ public class TableParseUtil {
}else if(tableSql.contains("comment on column")&&tableSql.contains("."+columnName+" is `")){
//新增对pgsql/oracle的字段备注支持
//COMMENT ON COLUMN public.check_info.check_name IS '检查者名称';
Matcher columnCommentMatcher = Pattern.compile("."+columnName+" is `").matcher(tableSql); // "\\{(.*?)\\}"
//2018-11-22 lshz0088 正则表达式的点号前面应该加上两个反斜杠否则会认为是任意字符
Matcher columnCommentMatcher = Pattern.compile("\\."+columnName+" is `").matcher(tableSql); // "\\{(.*?)\\}"
while(columnCommentMatcher.find()){
String columnCommentTmp = columnCommentMatcher.group();
System.out.println(columnCommentTmp);

View File

@ -28,32 +28,5 @@ spring:
expose-session-attributes: true
expose-spring-macro-helpers: true
#template-loader-path: classpath:/templates/
jpa:
show-sql: true
naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
dialect: org.hibernate.dialect.MySQL5Dialect
properties:
hibernate:
hbm2ddl:
auto: update
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
driver-class-name: com.mysql.jdbc.Driver
platform: mysql
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
filters: stat,wall,log4j
mvc:
static-path-pattern: /static/**