From f0b48ba78590d45af752cb2294dcedf4f3280944 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Sat, 13 Jul 2024 13:00:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20spring=20boot=202.x=E5=B0=81=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fluent/utils/sql/EntityNameUtils.java | 19 ++++++++++++++++--- .../FluentSqlAutoConfiguration.java | 4 +++- .../mapping/ReactiveSQLMappedRowMapper.java | 4 +++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/fluent-sql-core/src/main/java/group/flyfish/fluent/utils/sql/EntityNameUtils.java b/fluent-sql-core/src/main/java/group/flyfish/fluent/utils/sql/EntityNameUtils.java index 8f5d4a8..e33ea0f 100644 --- a/fluent-sql-core/src/main/java/group/flyfish/fluent/utils/sql/EntityNameUtils.java +++ b/fluent-sql-core/src/main/java/group/flyfish/fluent/utils/sql/EntityNameUtils.java @@ -4,6 +4,7 @@ import group.flyfish.fluent.utils.cache.LRUCache; import group.flyfish.fluent.utils.context.AliasComposite; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.springframework.core.annotation.MergedAnnotations; import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; @@ -27,6 +28,9 @@ import static group.flyfish.fluent.utils.sql.SqlNameUtils.wrap; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class EntityNameUtils { + private static final String JPA_TABLE = "javax.persistence.Table"; + private static final String SPRING_DATA_TABLE = "org.springframework.data.relational.core.mapping.Table"; + // SerializedLambda 反序列化缓存 private static final Map> FUNC_CACHE = new ConcurrentHashMap<>(); @@ -57,9 +61,18 @@ public final class EntityNameUtils { */ public static String getTableName(Class entityClass) { return TABLE_CACHE.computeIfAbsent(entityClass, k -> { - Table table = entityClass.getAnnotation(Table.class); - if (null != table && StringUtils.hasText(table.name())) { - return table.name(); + MergedAnnotations annotations = MergedAnnotations.from(entityClass); + if (annotations.isPresent(JPA_TABLE)) { + String tableName = annotations.get(JPA_TABLE).getString("name"); + if (StringUtils.hasText(tableName)) { + return tableName; + } + } + if (annotations.isPresent(SPRING_DATA_TABLE)) { + String tableName = annotations.get(SPRING_DATA_TABLE).getString("name"); + if (StringUtils.hasText(tableName)) { + return tableName; + } } return wrap(SqlNameUtils.camelToUnderline(entityClass.getSimpleName())); }); diff --git a/fluent-sql-spring-boot-starter/src/main/java/group/flyfish/fluent/autoconfigure/FluentSqlAutoConfiguration.java b/fluent-sql-spring-boot-starter/src/main/java/group/flyfish/fluent/autoconfigure/FluentSqlAutoConfiguration.java index cab77cf..cd9ea7a 100644 --- a/fluent-sql-spring-boot-starter/src/main/java/group/flyfish/fluent/autoconfigure/FluentSqlAutoConfiguration.java +++ b/fluent-sql-spring-boot-starter/src/main/java/group/flyfish/fluent/autoconfigure/FluentSqlAutoConfiguration.java @@ -11,6 +11,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.jdbc.core.JdbcTemplate; @@ -23,11 +24,11 @@ import javax.sql.DataSource; * * @author wangyu */ -@AutoConfigureAfter(DataSourceAutoConfiguration.class) @Import({R2dbcFluentSqlAutoConfigure.class, JdbcFluentSqlAutoConfigure.class}) public class FluentSqlAutoConfiguration { @ConditionalOnClass(DatabaseClient.class) + @AutoConfigureAfter(R2dbcAutoConfiguration.class) static class R2dbcFluentSqlAutoConfigure { /** @@ -44,6 +45,7 @@ public class FluentSqlAutoConfiguration { } @ConditionalOnClass(DataSource.class) + @AutoConfigureAfter(DataSourceAutoConfiguration.class) static class JdbcFluentSqlAutoConfigure { /** diff --git a/fluent-sql-spring/src/main/java/group/flyfish/fluent/mapping/ReactiveSQLMappedRowMapper.java b/fluent-sql-spring/src/main/java/group/flyfish/fluent/mapping/ReactiveSQLMappedRowMapper.java index 59294bf..aa8db26 100644 --- a/fluent-sql-spring/src/main/java/group/flyfish/fluent/mapping/ReactiveSQLMappedRowMapper.java +++ b/fluent-sql-spring/src/main/java/group/flyfish/fluent/mapping/ReactiveSQLMappedRowMapper.java @@ -1,5 +1,6 @@ package group.flyfish.fluent.mapping; +import io.r2dbc.spi.ColumnMetadata; import io.r2dbc.spi.Row; import io.r2dbc.spi.RowMetadata; import org.springframework.dao.DataRetrievalFailureException; @@ -48,7 +49,8 @@ public class ReactiveSQLMappedRowMapper implements BiFunction bean = descriptor.create(); - for (String column : rowMetadata.getColumnNames()) { + for (ColumnMetadata metadata : rowMetadata.getColumnMetadatas()) { + String column = metadata.getName(); try { bean.setValue(column, type -> row.get(column, type)); } catch (Exception ex) {