feat: 完善r2dbc场景

This commit is contained in:
wangyu 2024-06-25 18:11:37 +08:00
parent 2bf84f0c27
commit 0ec52fd90a
5 changed files with 48 additions and 7 deletions

View File

@ -2,7 +2,12 @@ package com.flyfish.framework.query.chain;
import com.flyfish.framework.query.holder.QueryChainHolder; import com.flyfish.framework.query.holder.QueryChainHolder;
import com.flyfish.framework.query.spi.adaptor.CriteriaAdaptor; import com.flyfish.framework.query.spi.adaptor.CriteriaAdaptor;
import com.flyfish.framework.utils.Assert;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.BinaryOperator; import java.util.function.BinaryOperator;
import java.util.function.Function; import java.util.function.Function;
@ -13,6 +18,10 @@ import java.util.function.Function;
*/ */
class DefaultQueryChainHolder<C> implements QueryChainHolder<C> { class DefaultQueryChainHolder<C> implements QueryChainHolder<C> {
private Function<CriteriaAdaptor<C>, BinaryOperator<C>> operator;
private final List<BiFunction<C, CriteriaAdaptor<C>, C>> builders = new ArrayList<>();
/** /**
* 等待下一步消费 * 等待下一步消费
* 如果不调用with该状态将一直保持可被其他link调用替换 * 如果不调用with该状态将一直保持可被其他link调用替换
@ -23,7 +32,8 @@ class DefaultQueryChainHolder<C> implements QueryChainHolder<C> {
*/ */
@Override @Override
public QueryChainHolder<C> link(Function<CriteriaAdaptor<C>, BinaryOperator<C>> operator) { public QueryChainHolder<C> link(Function<CriteriaAdaptor<C>, BinaryOperator<C>> operator) {
return null; this.operator = operator;
return this;
} }
/** /**
@ -33,10 +43,19 @@ class DefaultQueryChainHolder<C> implements QueryChainHolder<C> {
*/ */
@Override @Override
public void with(Function<CriteriaAdaptor<C>, C> criteria) { public void with(Function<CriteriaAdaptor<C>, C> criteria) {
Assert.notNull(operator, "连接操作不可为空");
BiFunction<C, CriteriaAdaptor<C>, C> builder = (previous, adaptor) -> {
// 连接逻辑
BinaryOperator<C> linker = operator.apply(adaptor);
// 具体条件
C next = criteria.apply(adaptor);
// 之前的条件
return linker.apply(previous, next);
};
builders.add(builder);
this.operator = null;
} }
/** /**
* 触发动作得到最终的 * 触发动作得到最终的
* *
@ -44,7 +63,11 @@ class DefaultQueryChainHolder<C> implements QueryChainHolder<C> {
*/ */
@Override @Override
public C get(CriteriaAdaptor<C> adaptor) { public C get(CriteriaAdaptor<C> adaptor) {
return null; if (CollectionUtils.isNotEmpty(builders)) {
return builders.stream()
.reduce(adaptor.empty(), (result, builder) -> builder.apply(result, adaptor), (a, b) -> a);
}
return adaptor.empty();
} }
/** /**
@ -54,6 +77,6 @@ class DefaultQueryChainHolder<C> implements QueryChainHolder<C> {
*/ */
@Override @Override
public boolean isEmpty() { public boolean isEmpty() {
return false; return builders.isEmpty();
} }
} }

View File

@ -15,6 +15,13 @@ import java.util.List;
*/ */
public interface CriteriaAdaptor<C> { public interface CriteriaAdaptor<C> {
/**
* 一个空的查询用于起手
*
* @return 结果
*/
C empty();
/** /**
* 且的关系进行拼接 * 且的关系进行拼接
* *

View File

@ -10,6 +10,11 @@ import java.util.List;
public class MongoCriteriaAdaptor implements CriteriaAdaptor<Criteria> { public class MongoCriteriaAdaptor implements CriteriaAdaptor<Criteria> {
@Override
public Criteria empty() {
return new Criteria();
}
@Override @Override
public Criteria and(Criteria first, Criteria other) { public Criteria and(Criteria first, Criteria other) {
return first.andOperator(other); return first.andOperator(other);

View File

@ -6,7 +6,8 @@ import com.flyfish.framework.r2dbc.repository.factory.DefaultReactiveRepositoryF
import com.flyfish.framework.r2dbc.repository.impl.DefaultReactiveRepositoryImpl; import com.flyfish.framework.r2dbc.repository.impl.DefaultReactiveRepositoryImpl;
import com.flyfish.framework.repository.ReactiveEntityOperations; import com.flyfish.framework.repository.ReactiveEntityOperations;
import io.r2dbc.spi.ConnectionFactory; import io.r2dbc.spi.ConnectionFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.data.mapping.callback.EntityCallback; import org.springframework.data.mapping.callback.EntityCallback;
@ -31,6 +32,7 @@ import java.util.Optional;
basePackages = "com.flyfish.framework" basePackages = "com.flyfish.framework"
) )
@EnableR2dbcAuditing @EnableR2dbcAuditing
@AutoConfiguration(before = R2dbcAutoConfiguration.class)
public class R2dbcDataConfig { public class R2dbcDataConfig {
@Bean @Bean
@ -39,7 +41,6 @@ public class R2dbcDataConfig {
} }
@Bean @Bean
@ConditionalOnBean(R2dbcEntityOperations.class)
public ReactiveEntityOperations r2dbcReactiveEntityOperations(R2dbcEntityOperations r2dbcEntityOperations) { public ReactiveEntityOperations r2dbcReactiveEntityOperations(R2dbcEntityOperations r2dbcEntityOperations) {
return new R2dbcReactiveEntityOperations(r2dbcEntityOperations); return new R2dbcReactiveEntityOperations(r2dbcEntityOperations);
} }

View File

@ -15,6 +15,11 @@ import java.util.List;
*/ */
public class R2dbcCriteriaAdaptor implements CriteriaAdaptor<Criteria> { public class R2dbcCriteriaAdaptor implements CriteriaAdaptor<Criteria> {
@Override
public Criteria empty() {
return Criteria.empty();
}
@Override @Override
public Criteria and(Criteria first, Criteria other) { public Criteria and(Criteria first, Criteria other) {
return first.and(other); return first.and(other);