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.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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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