From a2ebeb1526bceaf2f85b45f696ede64b2b63620f Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Mon, 8 Jul 2024 23:32:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flyfish-data/flyfish-data-r2dbc/pom.xml | 1 + .../config/FluentR2dbcAutoConfiguration.java | 80 +++++++++++++++++++ .../operations/R2dbcFluentOperations.java | 16 ++-- 3 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/config/FluentR2dbcAutoConfiguration.java diff --git a/flyfish-data/flyfish-data-r2dbc/pom.xml b/flyfish-data/flyfish-data-r2dbc/pom.xml index ab75604..2be3f44 100644 --- a/flyfish-data/flyfish-data-r2dbc/pom.xml +++ b/flyfish-data/flyfish-data-r2dbc/pom.xml @@ -37,6 +37,7 @@ group.flyfish.framework fluent-sql-core 0.0.5 + true diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/config/FluentR2dbcAutoConfiguration.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/config/FluentR2dbcAutoConfiguration.java new file mode 100644 index 0000000..f5c9bed --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/config/FluentR2dbcAutoConfiguration.java @@ -0,0 +1,80 @@ +package dev.flyfish.framework.r2dbc.config; + +import dev.flyfish.framework.r2dbc.operations.R2dbcFluentOperations; +import group.flyfish.fluent.chain.common.ExecutableSql; +import group.flyfish.fluent.entity.SQLEntity; +import group.flyfish.fluent.operations.FluentSQLOperations; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.r2dbc.core.DatabaseClient; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +/** + * fluent风格的sql编写支持 + * 基于fluent sql + * + * @author wangyu + */ +@ConditionalOnClass(FluentSQLOperations.class) +@ConditionalOnBean(DatabaseClient.class) +class FluentR2dbcAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public R2dbcFluentOperations r2dbcFluentOperations(DatabaseClient databaseClient) { + return new DefaultFluentOperations(databaseClient); + } + + /** + * 默认的实现 + * + * @author wangyu + */ + @RequiredArgsConstructor + private static class DefaultFluentOperations implements R2dbcFluentOperations { + + private final DatabaseClient databaseClient; + + @Override + public Mono findOne(ExecutableSql sql) { + SQLEntity entity = new SQLEntity(); + DatabaseClient.GenericExecuteSpec spec = databaseClient.sql(entity::getSql); + Object[] bindings = entity.getParameters(); + for (int i = 0; i < bindings.length; i++) { + spec.bind(i, bindings[i]); + } + return spec.mapValue() + } + + @Override + public Flux find(ExecutableSql sql) { + return null; + } + + @Override + public Mono> find(ExecutableSql sql, Pageable pageable) { + return null; + } + + @Override + public Mono findOne(ExecutableSql sql, Class resultType) { + return null; + } + + @Override + public Flux find(ExecutableSql sql, Class resultType) { + return null; + } + + @Override + public Mono> find(ExecutableSql sql, Pageable pageable, Class resultType) { + return null; + } + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/operations/R2dbcFluentOperations.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/operations/R2dbcFluentOperations.java index 232dba9..f4ece9f 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/operations/R2dbcFluentOperations.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/dev/flyfish/framework/r2dbc/operations/R2dbcFluentOperations.java @@ -16,20 +16,22 @@ public interface R2dbcFluentOperations { /** * 查询单个 * - * @param sql 可执行sql - * @param 泛型 + * @param sql 可执行sql + * @param resultType 结果类型 + * @param 泛型 * @return 结果 */ - Mono findOne(ExecutableSql sql); + Mono findOne(ExecutableSql sql, Class resultType); /** * 查询单个 * - * @param sql 可执行sql - * @param 泛型 + * @param sql 可执行sql + * @param resultType 结果类型 + * @param 泛型 * @return 结果 */ - Flux find(ExecutableSql sql); + Flux find(ExecutableSql sql, Class resultType); /** * 查询分页对象 @@ -38,5 +40,5 @@ public interface R2dbcFluentOperations { * @param 泛型 * @return 结果 */ - Mono> find(ExecutableSql sql, Pageable pageable); + Mono> find(ExecutableSql sql, Pageable pageable, Class resultType); }