refactor: 通过 builder 构建 FieldQuery 对象。

This commit is contained in:
Suomm 2023-07-15 17:49:54 +08:00
parent fbe722316a
commit 19644951a0

View File

@ -15,29 +15,116 @@
*/ */
package com.mybatisflex.core.field; package com.mybatisflex.core.field;
import com.mybatisflex.core.query.QueryWrapper;
import java.io.Serializable; import java.io.Serializable;
@SuppressWarnings("rawtypes")
public class FieldQuery implements Serializable { public class FieldQuery implements Serializable {
private String field; private String className;
private QueryWrapper queryWrapper; private String fieldName;
private FieldType fieldType = FieldType.AUTO;
private boolean prevent;
private QueryBuilder queryBuilder;
public String getField() { public String getClassName() {
return field; return className;
} }
public void setField(String field) { public void setClassName(String className) {
this.field = field; this.className = className;
} }
public QueryWrapper getQueryWrapper() { public String getFieldName() {
return queryWrapper; return fieldName;
} }
public void setQueryWrapper(QueryWrapper queryWrapper) { public void setFieldName(String fieldName) {
this.queryWrapper = queryWrapper; 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<T> {
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<T> fieldType(FieldType fieldType) {
this.fieldQuery.setFieldType(fieldType);
return this;
}
/**
* 阻止对嵌套类属性的查询只对 {@link FieldType#COLLECTION}
* {@link FieldType#ENTITY} 两种属性类型有效
*
* @return 构建者
*/
public Builder<T> prevent() {
this.fieldQuery.setPrevent(true);
return this;
}
/**
* 设置是否阻止对嵌套类属性的查询只对 {@link FieldType#COLLECTION}
* {@link FieldType#ENTITY} 两种属性类型有效
*
* @param prevent 是否阻止对嵌套类属性查询
* @return 构建者
*/
public Builder<T> prevent(boolean prevent) {
this.fieldQuery.setPrevent(prevent);
return this;
}
/**
* 设置查询这个属性的 {@code QueryWrapper} 对象
*
* @param queryBuilder 查询包装器
* @return 构建者
*/
public Builder<T> queryWrapper(QueryBuilder<T> queryBuilder) {
this.fieldQuery.setQueryBuilder(queryBuilder);
return this;
}
protected FieldQuery build() {
return this.fieldQuery;
}
} }
} }