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);
}