diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/BaseQo.java b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/BaseQo.java index 4a562ab..7d91b0a 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/BaseQo.java +++ b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/BaseQo.java @@ -23,6 +23,8 @@ public class BaseQo implements Qo { protected IUser user; + protected List fields; + public Qo accept(List result, Pageable pageable) { this.pageable = pageable; this.result = result; @@ -106,6 +108,16 @@ public class BaseQo implements Qo { return null; } + /** + * 获取查询的字段 + * + * @return 结果 + */ + @Override + public List getFields() { + return null; + } + /** * 内置的builder,重写后自动合并结果 * diff --git a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Qo.java b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Qo.java index efe9cee..50e3ace 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Qo.java +++ b/flyfish-data/src/main/java/com/flyfish/framework/domain/base/Qo.java @@ -1,7 +1,6 @@ package com.flyfish.framework.domain.base; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.flyfish.framework.domain.po.User; import org.springframework.data.domain.Example; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -74,6 +73,14 @@ public interface Qo { @JsonIgnore Criteria getCriteria(); + /** + * 获取查询的字段 + * + * @return 结果 + */ + @JsonIgnore + List getFields(); + /** * 让值全部包含在Pojo里 * diff --git a/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java b/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java index 84f4522..2dedee1 100644 --- a/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java +++ b/flyfish-data/src/main/java/com/flyfish/framework/repository/impl/QueryBuildUtils.java @@ -2,6 +2,7 @@ package com.flyfish.framework.repository.impl; import com.flyfish.framework.domain.base.Qo; import com.flyfish.framework.utils.CopyUtils; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.data.domain.Example; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -17,6 +18,22 @@ abstract class QueryBuildUtils { * @return 结果 */ static Optional getQuery(Qo qo) { + return buildQuery(qo).map(query -> { + if (CollectionUtils.isNotEmpty(qo.getFields())) { + query.fields().include(qo.getFields().toArray(new String[]{})); + } + return query; + }); + } + + /** + * 构建查询 + * + * @param qo 查询实体 + * @param 泛型 + * @return 结果 + */ + static Optional buildQuery(Qo qo) { Criteria criteria = null; if (null != qo.getCriteria()) { criteria = qo.getCriteria(); diff --git a/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java b/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java index 160c8cf..0fc7c81 100644 --- a/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java +++ b/flyfish-dict/src/main/java/com/flyfish/framework/dict/domain/DictionaryQo.java @@ -1,8 +1,13 @@ package com.flyfish.framework.dict.domain; +import com.flyfish.framework.builder.CriteriaBuilder; import com.flyfish.framework.domain.base.NameLikeQo; import lombok.Getter; import lombok.Setter; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.Arrays; +import java.util.List; /** * 字典查询实体 @@ -12,4 +17,20 @@ import lombok.Setter; @Getter @Setter public class DictionaryQo extends NameLikeQo { + + // 包含的code + private List codes; + + @Override + public CriteriaBuilder criteriaBuilder() { + return super.criteriaBuilder().with("codes", "code", CriteriaBuilder.Builders.IN); + } + + @Override + public List getFields() { + if (CollectionUtils.isNotEmpty(codes)) { + return Arrays.asList("_id", "code"); + } + return super.getFields(); + } }