From a5780ab41d35df2a5429b40380d192fb4c8bb52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=81=E5=9F=B9=E5=9F=B9?= Date: Sat, 10 Aug 2024 11:51:10 +0800 Subject: [PATCH] set GeneratedColumn's jdbcType default value to JdbcType.UNDEFINED. #2 --- .../mmegp/annotations/GeneratedColumn.java | 2 +- .../java/me/ningpp/mmegp/JavaParserUtil.java | 63 ++++++++++++++++--- .../me/ningpp/mmegp/entity/BigEntity.java | 48 +++++++------- 3 files changed, 78 insertions(+), 35 deletions(-) diff --git a/mmegp-annotations/src/main/java/me/ningpp/mmegp/annotations/GeneratedColumn.java b/mmegp-annotations/src/main/java/me/ningpp/mmegp/annotations/GeneratedColumn.java index 7f4f7ae..b2ba980 100644 --- a/mmegp-annotations/src/main/java/me/ningpp/mmegp/annotations/GeneratedColumn.java +++ b/mmegp-annotations/src/main/java/me/ningpp/mmegp/annotations/GeneratedColumn.java @@ -42,7 +42,7 @@ /** * jdbc type */ - JdbcType jdbcType(); + JdbcType jdbcType() default JdbcType.UNDEFINED; /** * type handler diff --git a/mmegp-mbg-ext/src/main/java/me/ningpp/mmegp/JavaParserUtil.java b/mmegp-mbg-ext/src/main/java/me/ningpp/mmegp/JavaParserUtil.java index 738c01b..3458347 100644 --- a/mmegp-mbg-ext/src/main/java/me/ningpp/mmegp/JavaParserUtil.java +++ b/mmegp-mbg-ext/src/main/java/me/ningpp/mmegp/JavaParserUtil.java @@ -68,6 +68,7 @@ public final class JavaParserUtil { private JavaParserUtil() { } + private static final Map PREDEFINED_TYPES; private static final Map JDBC_TYPES = new HashMap<>(); public static final String COUNT_GROUP_BY_COLUMNS_NAME = "countGroupByColumns"; public static final String AGGREGATES_NAME = "aggregates"; @@ -78,6 +79,42 @@ private JavaParserUtil() { } } + static { + Map predefinedTypes = new HashMap<>(); + predefinedTypes.put(boolean.class.getName(), JdbcType.BOOLEAN); + predefinedTypes.put(Boolean.class.getName(), JdbcType.BOOLEAN); + predefinedTypes.put(char.class.getName(), JdbcType.CHAR); + predefinedTypes.put(Character.class.getName(), JdbcType.CHAR); + predefinedTypes.put(byte.class.getName(), JdbcType.TINYINT); + predefinedTypes.put(Byte.class.getName(), JdbcType.TINYINT); + predefinedTypes.put(short.class.getName(), JdbcType.SMALLINT); + predefinedTypes.put(Short.class.getName(), JdbcType.SMALLINT); + predefinedTypes.put(int.class.getName(), JdbcType.INTEGER); + predefinedTypes.put(Integer.class.getName(), JdbcType.INTEGER); + predefinedTypes.put(long.class.getName(), JdbcType.BIGINT); + predefinedTypes.put(Long.class.getName(), JdbcType.BIGINT); + predefinedTypes.put(float.class.getName(), JdbcType.FLOAT); + predefinedTypes.put(Float.class.getName(), JdbcType.FLOAT); + predefinedTypes.put(double.class.getName(), JdbcType.DOUBLE); + predefinedTypes.put(Double.class.getName(), JdbcType.DOUBLE); + + predefinedTypes.put(String.class.getName(), JdbcType.VARCHAR); + + predefinedTypes.put(java.math.BigDecimal.class.getName(), JdbcType.DECIMAL); + predefinedTypes.put(java.math.BigInteger.class.getName(), JdbcType.BIGINT); + + predefinedTypes.put(java.sql.Date.class.getName(), JdbcType.DATE); + predefinedTypes.put(java.util.Date.class.getName(), JdbcType.TIMESTAMP); + predefinedTypes.put(java.sql.Timestamp.class.getName(), JdbcType.TIMESTAMP); + + predefinedTypes.put(java.time.LocalDate.class.getName(), JdbcType.DATE); + predefinedTypes.put(java.time.LocalDateTime.class.getName(), JdbcType.TIMESTAMP); + predefinedTypes.put(java.time.LocalTime.class.getName(), JdbcType.TIME); + predefinedTypes.put(java.time.Year.class.getName(), JdbcType.INTEGER); + + PREDEFINED_TYPES = Map.copyOf(predefinedTypes); + } + public static JavaParser newParser() { ParserConfiguration jpc = new ParserConfiguration(); jpc.setLanguageLevel(LanguageLevel.JAVA_17); @@ -145,19 +182,19 @@ private static Pair Pair> annota .orElse(null); } - private static JdbcType parseJdbcType(Map> annotationMembers) { - return parseEnumValue("jdbcType", JDBC_TYPES, annotationMembers, null); + private static JdbcType parseJdbcType(String typeClassName, + Map> annotationMembers) { + var declarJdbcType = parseEnumValue("jdbcType", JDBC_TYPES, annotationMembers, JdbcType.UNDEFINED); + if (declarJdbcType == JdbcType.UNDEFINED) { + return PREDEFINED_TYPES.get(typeClassName); + } else { + return declarJdbcType; + } } public static T parseEnumValue(String name, diff --git a/mmegp-mbg-ext/src/test/java/me/ningpp/mmegp/entity/BigEntity.java b/mmegp-mbg-ext/src/test/java/me/ningpp/mmegp/entity/BigEntity.java index de18295..ff1fe1b 100644 --- a/mmegp-mbg-ext/src/test/java/me/ningpp/mmegp/entity/BigEntity.java +++ b/mmegp-mbg-ext/src/test/java/me/ningpp/mmegp/entity/BigEntity.java @@ -35,63 +35,63 @@ @Generated(table = "big_entity") public class BigEntity { - @GeneratedColumn(name = "id", jdbcType = VARCHAR, id = true) + @GeneratedColumn(name = "id", id = true) private String id; - @GeneratedColumn(name = "f_boolean", jdbcType = JdbcType.BOOLEAN) + @GeneratedColumn(name = "f_boolean") private boolean fboolean; - @GeneratedColumn(name = "f_byte", jdbcType = JdbcType.TINYINT) + @GeneratedColumn(name = "f_byte") private byte fbyte; @GeneratedColumn(name = "f_bytes", jdbcType = JdbcType.BINARY) private byte[] fbytes; @GeneratedColumn(name = "field_bytes", jdbcType = JdbcType.BLOB, blob = true) private Byte[] fieldBytes; - @GeneratedColumn(name = "f_char", jdbcType = JdbcType.CHAR) + @GeneratedColumn(name = "f_char") private char fchar; - @GeneratedColumn(name = "f_character", jdbcType = JdbcType.CHAR) + @GeneratedColumn(name = "f_character") private Character fcharacter; - @GeneratedColumn(name = "f_short", jdbcType = JdbcType.SMALLINT) + @GeneratedColumn(name = "f_short") private short fshort; - @GeneratedColumn(name = "field_short", jdbcType = JdbcType.SMALLINT) + @GeneratedColumn(name = "field_short") private Short fieldShort; - @GeneratedColumn(name = "f_int", jdbcType = JdbcType.INTEGER) + @GeneratedColumn(name = "f_int") private int fint; - @GeneratedColumn(name = "field_integer", jdbcType = JdbcType.INTEGER) + @GeneratedColumn(name = "field_integer") private Integer fieldInteger; @GeneratedColumn(name = "f_int2", jdbcType = JdbcType.TINYINT) private int fint2; @GeneratedColumn(name = "field_integer2", jdbcType = JdbcType.TINYINT) private Integer fieldInteger2; - @GeneratedColumn(name = "f_long", jdbcType = JdbcType.BIGINT) + @GeneratedColumn(name = "f_long") private long flong; - @GeneratedColumn(name = "field_long", jdbcType = JdbcType.BIGINT) + @GeneratedColumn(name = "field_long") private Long fieldLong; - @GeneratedColumn(name = "f_float", jdbcType = JdbcType.FLOAT) + @GeneratedColumn(name = "f_float") private float ffloat; - @GeneratedColumn(name = "field_float", jdbcType = JdbcType.FLOAT) + @GeneratedColumn(name = "field_float") private Float fieldFloat; - @GeneratedColumn(name = "f_double", jdbcType = JdbcType.DOUBLE) + @GeneratedColumn(name = "f_double") private double fdouble; - @GeneratedColumn(name = "field_double", jdbcType = JdbcType.DOUBLE) + @GeneratedColumn(name = "field_double") private Double fieldDouble; - @GeneratedColumn(name = "f_bigint", jdbcType = JdbcType.BIGINT) + @GeneratedColumn(name = "f_bigint") private BigInteger fbigint; - @GeneratedColumn(name = "f_bigdecimal", jdbcType = JdbcType.DECIMAL) + @GeneratedColumn(name = "f_bigdecimal") private BigDecimal fbigdecimal; - @GeneratedColumn(name = "f_date", jdbcType = JdbcType.TIMESTAMP) + @GeneratedColumn(name = "f_date") private Date fdate; - @GeneratedColumn(name = "f_sqldate", jdbcType = JdbcType.DATE) + @GeneratedColumn(name = "f_sqldate") private java.sql.Date fsqldate; - @GeneratedColumn(name = "f_timestamp", jdbcType = JdbcType.TIMESTAMP) + @GeneratedColumn(name = "f_timestamp") private Timestamp ftimestamp; - @GeneratedColumn(name = "f_year", jdbcType = JdbcType.INTEGER) + @GeneratedColumn(name = "f_year") private Year fyear; @GeneratedColumn(name = "f_yearmonth", jdbcType = VARCHAR) private YearMonth fyearmonth; - @GeneratedColumn(name = "f_localdate", jdbcType = JdbcType.DATE) + @GeneratedColumn(name = "f_localdate") private LocalDate flocaldate; - @GeneratedColumn(name = "f_localtime", jdbcType = JdbcType.TIME) + @GeneratedColumn(name = "f_localtime") private LocalTime flocaltime; - @GeneratedColumn(name = "f_localdatetime", jdbcType = JdbcType.TIMESTAMP) + @GeneratedColumn(name = "f_localdatetime") private LocalDateTime flocaldatetime; @GeneratedColumn(name = "f_uuid", jdbcType = VARCHAR, typeHandler = UUIDStringTypeHandler.class) private UUID fuuid;