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