diff --git a/README.md b/README.md index 9f6c439..159e6dc 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ SpringBootCodeGenerator CSDN博客 http://blog.csdn.net/moshowgame 更新日期 更新内容 +20181122优化正则表达式点号的处理,优化处理字段类型,对number类型增加int,long,BigDecimal的区分判断(感谢@lshz0088的指导)。 20181108修复非字段描述"KEY FK_xxxx (xxxx)"导致生成KEY字段情况(感谢@tornadoorz反馈)。 20181018支持double(x,x)的类型,以及comment里面包含一些特殊字符的处理(感谢@tanwubo的反馈)。 20181010CDN变更,修复CDN不稳定导致网页js报错问题。 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 106f7a9..8d4b59a 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 @@ -90,7 +90,8 @@ public class IndexController { } } logger.info("生成代码行数:{}", lineNum); - logger.info("生成代码数据:{}", result); + //测试环境可自行开启 + //logger.info("生成代码数据:{}", result); return new ReturnT>(result); } catch (IOException | TemplateException e) { logger.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 4d8056b..a5bba50 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 @@ -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类型增加int,long,BigDecimal的区分判断 + //如果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); diff --git a/generator-web/src/main/resources/application.yml b/generator-web/src/main/resources/application.yml index e24ba75..63f003a 100644 --- a/generator-web/src/main/resources/application.yml +++ b/generator-web/src/main/resources/application.yml @@ -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/** \ No newline at end of file