feat: 暂存

This commit is contained in:
wangyu 2022-08-05 17:31:37 +08:00
parent 36ba7dbe40
commit 89ac2c3fcf
2 changed files with 36 additions and 3 deletions

View File

@ -5,20 +5,23 @@ import com.flyfish.framework.query.Queries;
import com.flyfish.framework.query.QueryChain; import com.flyfish.framework.query.QueryChain;
import com.flyfish.framework.query.QueryCondition; import com.flyfish.framework.query.QueryCondition;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.data.mongodb.core.query.Criteria;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
/** /**
* mongodb实现的基于名称的查询链 * mongodb实现的基于名称的查询链
* 这里需要一个机制能够将父类上下文带入并且能够知晓实际查询对象的连接方式
* 这就需要用到观察者模式以便延迟执行将动作作为事件发布到对象里在具体的执行时机再进行fire
* 于是乎我们便可以优雅而且低耦合的实现链式了
* *
* @author wangyu * @author wangyu
*/ */
public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQueryChain { public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQueryChain {
private final QueryChainListener listener = null;
/** /**
* 以且连接下一个字段 * 以且连接下一个字段
* *
@ -27,6 +30,7 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ
*/ */
@Override @Override
public QueryCondition<NamedQueryChain> and(String column) { public QueryCondition<NamedQueryChain> and(String column) {
listener.waitFor(criteria -> criteria.andOperator(criteria));
return new NamedQueryCondition(column); return new NamedQueryCondition(column);
} }
@ -127,7 +131,8 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ
*/ */
@Override @Override
public NamedQueryChain eq(Object value) { public NamedQueryChain eq(Object value) {
MongoNamedQueryChain.this.criteria.is(value); criteria.is(value);
listener.fire();
return MongoNamedQueryChain.this; return MongoNamedQueryChain.this;
} }

View File

@ -0,0 +1,28 @@
package com.flyfish.framework.mongodb.query.impl;
import org.springframework.data.mongodb.core.query.Criteria;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* 监听器观察者
*
* @author wangyu
*/
public interface QueryChainListener {
/**
* 等待下一步消费
*
* @return 本身
*/
QueryChainListener waitFor(Consumer<Criteria> consumer);
/**
* 触发动作
*
* @return 本身
*/
QueryChainListener fire();
}