diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQuery.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQuery.java index 31b91e80..34718eff 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQuery.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/field/FieldQuery.java @@ -15,29 +15,116 @@ */ package com.mybatisflex.core.field; -import com.mybatisflex.core.query.QueryWrapper; - import java.io.Serializable; +@SuppressWarnings("rawtypes") public class FieldQuery implements Serializable { - private String field; - private QueryWrapper queryWrapper; + private String className; + private String fieldName; + private FieldType fieldType = FieldType.AUTO; + private boolean prevent; + private QueryBuilder queryBuilder; - public String getField() { - return field; + public String getClassName() { + return className; } - public void setField(String field) { - this.field = field; + public void setClassName(String className) { + this.className = className; } - public QueryWrapper getQueryWrapper() { - return queryWrapper; + public String getFieldName() { + return fieldName; } - public void setQueryWrapper(QueryWrapper queryWrapper) { - this.queryWrapper = queryWrapper; + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public FieldType getFieldType() { + return fieldType; + } + + public void setFieldType(FieldType fieldType) { + this.fieldType = fieldType; + } + + public boolean isPrevent() { + return prevent; + } + + public void setPrevent(boolean prevent) { + this.prevent = prevent; + } + + public QueryBuilder getQueryBuilder() { + return queryBuilder; + } + + public void setQueryBuilder(QueryBuilder queryBuilder) { + this.queryBuilder = queryBuilder; + } + + public static class Builder { + + private final FieldQuery fieldQuery; + + public Builder(String className, String fieldName) { + this.fieldQuery = new FieldQuery(); + this.fieldQuery.setClassName(className); + this.fieldQuery.setFieldName(fieldName); + } + + /** + * 设置属性类型(可选,默认自动识别)。 + * + * @param fieldType 属性类型 + * @return 构建者 + */ + public Builder fieldType(FieldType fieldType) { + this.fieldQuery.setFieldType(fieldType); + return this; + } + + /** + * 阻止对嵌套类属性的查询,只对 {@link FieldType#COLLECTION} 与 + * {@link FieldType#ENTITY} 两种属性类型有效。 + * + * @return 构建者 + */ + public Builder prevent() { + this.fieldQuery.setPrevent(true); + return this; + } + + /** + * 设置是否阻止对嵌套类属性的查询,只对 {@link FieldType#COLLECTION} 与 + * {@link FieldType#ENTITY} 两种属性类型有效。 + * + * @param prevent 是否阻止对嵌套类属性查询 + * @return 构建者 + */ + public Builder prevent(boolean prevent) { + this.fieldQuery.setPrevent(prevent); + return this; + } + + /** + * 设置查询这个属性的 {@code QueryWrapper} 对象。 + * + * @param queryBuilder 查询包装器 + * @return 构建者 + */ + public Builder queryWrapper(QueryBuilder queryBuilder) { + this.fieldQuery.setQueryBuilder(queryBuilder); + return this; + } + + protected FieldQuery build() { + return this.fieldQuery; + } + } }