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