From 4056ddd82964813d169055faba836429d7db546d Mon Sep 17 00:00:00 2001 From: longzhe Date: Thu, 10 Jun 2021 15:01:20 +0800 Subject: [PATCH 1/2] 2021-6-10 15:00:19 by longzhe 1. fix #I3TKB7 on mysql and oracle; --- front/public/velocity/java.json | 8 ++ .../com/gitee/gen/gen/ColumnDefinition.java | 24 +++++ .../gen/gen/mysql/MySqlColumnSelector.java | 44 ++++++-- .../gen/gen/oracle/OracleColumnSelector.java | 100 +++++++++++------- 4 files changed, 128 insertions(+), 48 deletions(-) diff --git a/front/public/velocity/java.json b/front/public/velocity/java.json index 38f64ca..28e970a 100644 --- a/front/public/velocity/java.json +++ b/front/public/velocity/java.json @@ -165,6 +165,14 @@ { "expression": "${column.comment}", "text": "字段注释" + }, + { + "expression": "${column.maxLength}", + "text": "字段长度" + }, + { + "expression": "${column.scale}", + "text": "小数位长度" } ] } diff --git a/gen/src/main/java/com/gitee/gen/gen/ColumnDefinition.java b/gen/src/main/java/com/gitee/gen/gen/ColumnDefinition.java index 04b3174..6571b0d 100644 --- a/gen/src/main/java/com/gitee/gen/gen/ColumnDefinition.java +++ b/gen/src/main/java/com/gitee/gen/gen/ColumnDefinition.java @@ -27,6 +27,30 @@ public class ColumnDefinition { * 字段注释 */ private String comment; + /** + * 字段长度 + */ + private Integer maxLength; + /** + * 小数位长度 + */ + private Integer scale; + + public void setMaxLength(Integer maxLength) { + this.maxLength = maxLength; + } + + public void setScale(Integer scale) { + this.scale = scale; + } + + public Integer getMaxLength() { + return maxLength; + } + + public Integer getScale() { + return scale; + } /** * 获得基本类型,int,float diff --git a/gen/src/main/java/com/gitee/gen/gen/mysql/MySqlColumnSelector.java b/gen/src/main/java/com/gitee/gen/gen/mysql/MySqlColumnSelector.java index b808d81..13e0dfc 100644 --- a/gen/src/main/java/com/gitee/gen/gen/mysql/MySqlColumnSelector.java +++ b/gen/src/main/java/com/gitee/gen/gen/mysql/MySqlColumnSelector.java @@ -5,6 +5,7 @@ import com.gitee.gen.gen.ColumnSelector; import com.gitee.gen.gen.GeneratorConfig; import com.gitee.gen.gen.TypeFormatter; import com.gitee.gen.util.FieldUtil; +import org.apache.commons.lang.StringUtils; import java.util.Map; import java.util.Set; @@ -17,7 +18,22 @@ public class MySqlColumnSelector extends ColumnSelector { private static final TypeFormatter TYPE_FORMATTER = new MySqlTypeFormatter(); - private static final String SHOW_SQL = "SHOW FULL COLUMNS FROM `%s`"; + private static final String SHOW_SQL = " SELECT " + + " COLUMN_NAME AS 'Field', " + + " COLUMN_DEFAULT AS 'Default', " + + " IS_NULLABLE AS 'Null', " + + " DATA_TYPE AS 'DataType', " + + " CASE DATA_TYPE " + + " WHEN 'int' THEN NUMERIC_PRECISION " + + " WHEN 'varchar' THEN CHARACTER_MAXIMUM_LENGTH " + + " END AS 'MaxLength', " + + " IFNULL(NUMERIC_SCALE,0) AS 'Scale', " + + " COLUMN_TYPE AS 'Type', " + + " COLUMN_KEY 'KEY', " + + " EXTRA AS 'Extra', " + + " COLUMN_COMMENT AS 'Comment' " + + " FROM information_schema.`COLUMNS` " + + " WHERE 1=1 AND TABLE_SCHEMA = '%s' AND TABLE_NAME = '%s' "; public MySqlColumnSelector(GeneratorConfig generatorConfig) { super(generatorConfig); @@ -28,36 +44,42 @@ public class MySqlColumnSelector extends ColumnSelector { */ @Override protected String getColumnInfoSQL(String tableName) { - return String.format(SHOW_SQL, tableName); + return String.format(SHOW_SQL, getGeneratorConfig().getDbName(), tableName); } - + /* * {FIELD=username, EXTRA=, COMMENT=用户名, COLLATION=utf8_general_ci, PRIVILEGES=select,insert,update,references, KEY=PRI, NULL=NO, DEFAULT=null, TYPE=varchar(20)} */ @Override protected ColumnDefinition buildColumnDefinition(Map rowMap){ Set columnSet = rowMap.keySet(); - + for (String columnInfo : columnSet) { rowMap.put(columnInfo.toUpperCase(), rowMap.get(columnInfo)); } - + ColumnDefinition columnDefinition = new ColumnDefinition(); columnDefinition.setColumnName(FieldUtil.convertString(rowMap.get("FIELD"))); - + boolean isIdentity = "auto_increment".equalsIgnoreCase(FieldUtil.convertString(rowMap.get("EXTRA"))); columnDefinition.setIsIdentity(isIdentity); - + boolean isPk = "PRI".equalsIgnoreCase(FieldUtil.convertString(rowMap.get("KEY"))); columnDefinition.setIsPk(isPk); - + String type = FieldUtil.convertString(rowMap.get("TYPE")); columnDefinition.setType(TYPE_FORMATTER.format(type)); - + columnDefinition.setComment(FieldUtil.convertString(rowMap.get("COMMENT"))); - + + String maxLength = FieldUtil.convertString(rowMap.get("MAXLENGTH")); + columnDefinition.setMaxLength(new Integer(StringUtils.isEmpty(maxLength) ? "0" : maxLength)); + + String scale = FieldUtil.convertString(rowMap.get("SCALE")); + columnDefinition.setScale(new Integer(StringUtils.isEmpty(scale) ? "0" : scale)); + return columnDefinition; } -} +} \ No newline at end of file diff --git a/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java b/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java index 94eb288..56a5262 100644 --- a/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java +++ b/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java @@ -17,26 +17,45 @@ public class OracleColumnSelector extends ColumnSelector { private static final TypeFormatter TYPE_FORMATTER = new OracleTypeFormatter(); - private static final String COLUMN_SQL = "select " - + " utc.column_name as FIELD,utc.data_type TYPE, utc.data_scale SCALE, utc.data_length 最大长度, " - + " CASE utc.nullable WHEN 'N' THEN '否' ELSE '是' END 可空, " - + " utc.data_default 默认值,ucc.comments COMMENTS,UTC.table_name 表名, " - + " CASE UTC.COLUMN_NAME " - + " WHEN (select " - + " col.column_name " - + " from " - + " user_constraints con,user_cons_columns col " - + " where " - + " con.constraint_name=col.constraint_name and con.constraint_type='P' " - + " and col.table_name='%s') THEN 'true' ELSE 'false' END AS KEY " - + " from " - + " user_tab_columns utc,user_col_comments ucc " - + " where " - + " utc.table_name = ucc.table_name " - + " and utc.column_name = ucc.column_name " - + " and utc.table_name = '%s' " - + " order by " - + " column_id "; +// private static final String COLUMN_SQL = "select " +// + " utc.column_name as FIELD,utc.data_type TYPE, utc.data_scale SCALE, utc.data_length 最大长度, " +// + " CASE utc.nullable WHEN 'N' THEN '否' ELSE '是' END 可空, " +// + " utc.data_default 默认值,ucc.comments COMMENTS,UTC.table_name 表名, " +// + " CASE UTC.COLUMN_NAME " +// + " WHEN (select " +// + " col.column_name " +// + " from " +// + " user_constraints con,user_cons_columns col " +// + " where " +// + " con.constraint_name=col.constraint_name and con.constraint_type='P' " +// + " and col.table_name='%s') THEN 'true' ELSE 'false' END AS KEY " +// + " from " +// + " user_tab_columns utc,user_col_comments ucc " +// + " where " +// + " utc.table_name = ucc.table_name " +// + " and utc.column_name = ucc.column_name " +// + " and utc.table_name = '%s' " +// + " order by " +// + " column_id "; + + private static final String COLUMN_SQL = " SELECT " + + " atc.COLUMN_NAME FIELD, atc.DATA_TYPE TYPE, atc.DATA_SCALE SCALE, atc.DATA_LENGTH MAXLENGTH, " + + " CASE atc.NULLABLE WHEN 'N' THEN '否' ELSE '是' END 可空, " + + " atc.DATA_DEFAULT 默认值, acc.COMMENTS COMMENTS, atc.TABLE_NAME 表名, " + + " CASE atc.COLUMN_NAME " + + " WHEN " + + " ( SELECT col.column_name FROM all_constraints con " + + " LEFT JOIN all_cons_columns col ON con.table_name = col.table_name " + + " AND con.OWNER = col.OWNER AND con.CONSTRAINT_NAME = col.CONSTRAINT_NAME " + + " WHERE con.constraint_type = 'P' " + + " AND col.table_name = '%s' AND con.OWNER = '%s' ) " + + " THEN 'true' ELSE 'false' END AS KEY " + + " FROM ALL_TAB_COLUMNS atc " + + " LEFT JOIN ALL_COL_COMMENTS acc " + + " ON acc.TABLE_NAME = atc.TABLE_NAME AND acc.COLUMN_NAME = atc.COLUMN_NAME " + + " AND acc.OWNER = atc.OWNER " + + " WHERE atc.TABLE_NAME = '%s' AND atc.OWNER = '%s' " + + " ORDER BY atc.COLUMN_ID "; public OracleColumnSelector(GeneratorConfig generatorConfig) { super(generatorConfig); @@ -44,43 +63,50 @@ public class OracleColumnSelector extends ColumnSelector { @Override protected String getColumnInfoSQL(String tableName) { - return String.format(COLUMN_SQL, tableName, tableName); + String owner = this.getGeneratorConfig().getSchemaName(); + return String.format(COLUMN_SQL, tableName, owner, tableName, owner); } - + @Override protected ColumnDefinition buildColumnDefinition(Map rowMap){ Set columnSet = rowMap.keySet(); - + for (String columnInfo : columnSet) { rowMap.put(columnInfo.toUpperCase(), rowMap.get(columnInfo)); } - + ColumnDefinition columnDefinition = new ColumnDefinition(); - + columnDefinition.setColumnName(FieldUtil.convertString(rowMap.get("FIELD"))); columnDefinition.setIsIdentity(false); - + boolean isPk = "true".equalsIgnoreCase(FieldUtil.convertString(rowMap.get("KEY"))); columnDefinition.setIsPk(isPk); - + String type = FieldUtil.convertString(rowMap.get("TYPE")); - // 如果是number + // 如果是number 就对应decimal if (StringUtils.containsIgnoreCase(type, "number")) { // 有精度则为decimal,否则是int - Object scaleCol = rowMap.get("SCALE"); - if (scaleCol == null) { - scaleCol = 0; - } - String scale = String.valueOf(scaleCol); - type = "0".equals(scale) ? "int" : "decimal"; +// Object scaleCol = rowMap.get("SCALE"); +// if (scaleCol == null) { +// scaleCol = 0; +// } +// String scale = String.valueOf(scaleCol); + type = "decimal"; } columnDefinition.setType(TYPE_FORMATTER.format(type)); - + columnDefinition.setComment(FieldUtil.convertString(rowMap.get("COMMENTS"))); + String maxLength = FieldUtil.convertString(rowMap.get("MAXLENGTH")); + columnDefinition.setMaxLength(new Integer(StringUtils.isEmpty(maxLength) ? "0" : maxLength)); + + String scale = FieldUtil.convertString(rowMap.get("SCALE")); + columnDefinition.setScale(new Integer(StringUtils.isEmpty(scale) ? "0" : scale)); + return columnDefinition; } - -} + +} \ No newline at end of file -- Gitee From 12675c940ed4fd23e873629bce571462825523e9 Mon Sep 17 00:00:00 2001 From: longzhe Date: Thu, 10 Jun 2021 15:17:41 +0800 Subject: [PATCH 2/2] 2021-6-10 15:17:36 by longzhe 1. roll back number type check in oracle; --- .../gitee/gen/gen/oracle/OracleColumnSelector.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java b/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java index 8d36a28..f4ea515 100644 --- a/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java +++ b/gen/src/main/java/com/gitee/gen/gen/oracle/OracleColumnSelector.java @@ -85,15 +85,15 @@ public class OracleColumnSelector extends ColumnSelector { columnDefinition.setIsPk(isPk); String type = FieldUtil.convertString(rowMap.get("TYPE")); - // 如果是number 就对应decimal + // 如果是number if (StringUtils.containsIgnoreCase(type, "number")) { // 有精度则为decimal,否则是int -// Object scaleCol = rowMap.get("SCALE"); -// if (scaleCol == null) { -// scaleCol = 0; -// } -// String scale = String.valueOf(scaleCol); - type = "decimal"; + Object scaleCol = rowMap.get("SCALE"); + if (scaleCol == null) { + scaleCol = 0; + } + String scale = String.valueOf(scaleCol); + type = "0".equals(scale) ? "int" : "decimal"; } columnDefinition.setType(TYPE_FORMATTER.format(type)); -- Gitee