From e8f2e68f0e422f68cafb89d243d2ccb72f1264d2 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Wed, 8 Jul 2026 06:55:18 +0000 Subject: [PATCH] =?UTF-8?q?!871=20update=20=E4=BC=98=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update 扩展数据库字段类型支持,增加浮点型和其他类型的规范化处理 --- .../dromara/gen/constant/GenConstants.java | 18 ++++++++---- .../dromara/gen/domain/GenTableColumn.java | 17 +++++++++-- .../java/org/dromara/gen/util/GenUtils.java | 29 +++++++++++++++---- .../dromara/gen/util/TemplateEngineUtils.java | 14 +++++++-- 4 files changed, 62 insertions(+), 16 deletions(-) diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java index 848bf99d0..4b903f43b 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java @@ -108,26 +108,29 @@ public interface GenConstants { /** * 数据库字符串类型 */ - String[] COLUMNTYPE_STR = {"char", "varchar", "enum", "set", "nchar", "nvarchar", "varchar2", "nvarchar2"}; + String[] COLUMNTYPE_STR = {"char", "varchar", "enum", "set", "nchar", "nvarchar", "varchar2", "nvarchar2", + "long varchar", "long nvarchar", "uniqueidentifier", "uuid", "json", "jsonb", "xml"}; /** * 数据库文本类型 */ String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext", "binary", "varbinary", "blob", - "ntext", "image", "bytea"}; + "ntext", "image", "bytea", "clob", "nclob", "long", "long raw", "raw"}; /** * 数据库时间类型 */ String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp", "year", "interval", - "smalldatetime", "datetime2", "datetimeoffset", "timestamptz"}; + "smalldatetime", "datetime2", "datetimeoffset", "timestamptz", "timestamp with time zone", + "timestamp without time zone", "time with time zone", "time without time zone"}; /** * 数据库数字类型 */ String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "int2", "int4", "int8", "number", "integer", - "bit", "bigint", "float", "float4", "float8", "double", "decimal", "numeric", "real", "double precision", - "smallserial", "serial", "bigserial", "money", "smallmoney"}; + "bit", "boolean", "bool", "bigint", "float", "float4", "float8", "double", "decimal", "dec", "fixed", + "numeric", "real", "double precision", "binary_float", "binary_double", "smallserial", "serial", + "serial2", "serial4", "serial8", "bigserial", "money", "smallmoney"}; /** * BO对象 不需要添加字段 @@ -233,6 +236,11 @@ public interface GenConstants { */ String TYPE_DOUBLE = "Double"; + /** + * 单精度浮点型 + */ + String TYPE_FLOAT = "Float"; + /** * 高精度计算类型 */ diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java index bb6ac75fe..d557555bb 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java @@ -156,7 +156,7 @@ public class GenTableColumn extends BaseEntity { } if (StringUtils.equalsAny(this.javaType, GenConstants.TYPE_LONG, GenConstants.TYPE_INTEGER, GenConstants.TYPE_DOUBLE, - "Float", GenConstants.TYPE_BIGDECIMAL)) { + GenConstants.TYPE_FLOAT, GenConstants.TYPE_BIGDECIMAL)) { return "number"; } if (StringUtils.equals(this.javaType, GenConstants.TYPE_BOOLEAN)) { @@ -174,7 +174,7 @@ public class GenTableColumn extends BaseEntity { if (StringUtils.equals(this.javaType, GenConstants.TYPE_BOOLEAN)) { return "true"; } - if (StringUtils.equalsAny(this.javaType, GenConstants.TYPE_INTEGER, GenConstants.TYPE_LONG)) { + if (isNumberType()) { return "0"; } return "'0'"; @@ -189,12 +189,23 @@ public class GenTableColumn extends BaseEntity { if (StringUtils.equals(this.javaType, GenConstants.TYPE_BOOLEAN)) { return "false"; } - if (StringUtils.equalsAny(this.javaType, GenConstants.TYPE_INTEGER, GenConstants.TYPE_LONG)) { + if (isNumberType()) { return "1"; } return "'1'"; } + /** + * 判断当前字段是否为数值类型。 + * + * @return 数值类型返回 {@code true} + */ + public boolean isNumberType() { + return StringUtils.equalsAny(this.javaType, + GenConstants.TYPE_INTEGER, GenConstants.TYPE_LONG, GenConstants.TYPE_DOUBLE, + GenConstants.TYPE_FLOAT, GenConstants.TYPE_BIGDECIMAL); + } + /** * 是否为日期范围查询字段。 * diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java index aa5519662..3722d9851 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java @@ -46,7 +46,7 @@ public class GenUtils { * @param table 所属业务表对象 */ public static void initColumnField(GenTableColumn column, GenTable table) { - String dataType = getDbType(column.getColumnType()).toLowerCase(); + String dataType = normalizeDbType(getDbType(column.getColumnType())); // 统一转小写 避免有些数据库默认大写问题 如果需要特别书写方式 请在实体类增加注解标注别名 String columnName = column.getColumnName().toLowerCase(); Integer columnLength = getColumnLength(column.getColumnType()); @@ -150,16 +150,20 @@ public class GenUtils { if (isBooleanColumn(dataType, columnLength, columnScale, columnName)) { return GenConstants.TYPE_BOOLEAN; } - if (arraysContains(new String[]{"decimal", "numeric", "money", "smallmoney"}, dataType)) { - return columnScale > 0 ? GenConstants.TYPE_BIGDECIMAL : resolveIntegerJavaType(columnLength); + if (arraysContains(new String[]{"decimal", "dec", "fixed", "numeric", "money", "smallmoney"}, dataType)) { + return GenConstants.TYPE_BIGDECIMAL; } - if (arraysContains(new String[]{"float", "float4", "float8", "double", "real", "double precision"}, dataType)) { + if (arraysContains(new String[]{"float4", "real", "binary_float"}, dataType)) { + return GenConstants.TYPE_FLOAT; + } + if (arraysContains(new String[]{"float", "float8", "double", "double precision", "binary_double"}, dataType)) { return GenConstants.TYPE_DOUBLE; } - if (arraysContains(new String[]{"bigint", "int8", "bigserial"}, dataType)) { + if (arraysContains(new String[]{"bigint", "int8", "bigserial", "serial8"}, dataType)) { return GenConstants.TYPE_LONG; } - if (arraysContains(new String[]{"smallint", "mediumint", "int", "int2", "int4", "integer", "smallserial", "serial"}, dataType)) { + if (arraysContains(new String[]{"tinyint", "smallint", "mediumint", "int", "int2", "int4", "integer", + "smallserial", "serial", "serial2", "serial4"}, dataType)) { return GenConstants.TYPE_INTEGER; } if (StringUtils.equals(dataType, "number")) { @@ -171,6 +175,19 @@ public class GenUtils { return GenConstants.TYPE_LONG; } + /** + * 规范化数据库字段类型,去除 MySQL 等数据库的类型修饰。 + * + * @param dataType 数据库字段类型 + * @return 规范化后的数据库字段类型 + */ + private static String normalizeDbType(String dataType) { + return StringUtils.trim(dataType) + .toLowerCase() + .replace(" unsigned", "") + .replace(" zerofill", ""); + } + /** * 根据整数字段长度解析 Java 类型。 * diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java index b0c149da1..3f62f36e1 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java @@ -718,7 +718,16 @@ public class TemplateEngineUtils { if (StringUtils.equals(column.getJavaType(), GenConstants.TYPE_LONG)) { return value + "L"; } - if (StringUtils.equalsAny(column.getJavaType(), GenConstants.TYPE_INTEGER, GenConstants.TYPE_DOUBLE, GenConstants.TYPE_BIGDECIMAL)) { + if (StringUtils.equals(column.getJavaType(), GenConstants.TYPE_FLOAT)) { + return value + "F"; + } + if (StringUtils.equals(column.getJavaType(), GenConstants.TYPE_DOUBLE)) { + return value + "D"; + } + if (StringUtils.equals(column.getJavaType(), GenConstants.TYPE_BIGDECIMAL)) { + return "new java.math.BigDecimal(\"" + value + "\")"; + } + if (StringUtils.equals(column.getJavaType(), GenConstants.TYPE_INTEGER)) { return value; } return "\"" + value + "\""; @@ -735,7 +744,8 @@ public class TemplateEngineUtils { if (ObjectUtil.isNull(column) || StringUtils.isBlank(value)) { return "undefined"; } - if (StringUtils.equalsAny(column.getJavaType(), GenConstants.TYPE_LONG, GenConstants.TYPE_INTEGER, GenConstants.TYPE_DOUBLE, GenConstants.TYPE_BIGDECIMAL)) { + if (StringUtils.equalsAny(column.getJavaType(), GenConstants.TYPE_LONG, GenConstants.TYPE_INTEGER, + GenConstants.TYPE_DOUBLE, GenConstants.TYPE_FLOAT, GenConstants.TYPE_BIGDECIMAL)) { return value; } return "'" + value + "'";