![JAR search and dependency download from the Maven repository](/logo.png)
cn.featherfly.common.db.builder.ConditionGroup Maven / Gradle / Ivy
package cn.featherfly.common.db.builder;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import cn.featherfly.common.db.operator.LogicOperator;
import cn.featherfly.common.db.operator.QueryOperator;
import cn.featherfly.common.lang.LangUtils;
import cn.featherfly.common.lang.StringUtils;
/**
*
* 条件逻辑组建造者
*
*
* @author zhongj
*/
public class ConditionGroup implements ExpressionBuilder, LogicBuilder , ParamedExpression{
/**
* @param parent 上级组
*/
ConditionGroup(ConditionGroup parent) {
this.parent = parent;
this.queryAlias = parent.queryAlias;
}
/**
* @param parent
* @param queryAlias
*/
ConditionGroup(String queryAlias) {
this.queryAlias = queryAlias;
}
/**
*
* and 条件
*
* @return this
*/
@Override
public ExpressionBuilder and() {
addCondition(new LogicExpression(LogicOperator.AND));
return this;
}
/**
*
* or 条件
*
* @return this
*/
@Override
public ExpressionBuilder or() {
addCondition(new LogicExpression(LogicOperator.OR));
return this;
}
/**
* {@inheritDoc}
*/
@Override
public LogicBuilder add(String name, Object value,
QueryOperator queryOperator) {
addCondition(new ConditionExpression(name, queryAlias, value, queryOperator));
return this;
}
/**
*
* 小于
*
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder lt(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.lt));
return this;
}
/**
* 小于等于
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder le(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.le));
return this;
}
/**
* 等于
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder eq(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.eq));
return this;
}
/**
* {@inheritDoc}
*/
@Override
public LogicBuilder ne(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.ne));
return this;
}
/**
* 大于等于
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder ge(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.ge));
return this;
}
/**
* 大于
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder gt(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.gt));
return this;
}
/**
* 以XX开始
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder sw(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.sw));
return this;
}
/**
* 包含
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder co(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.co));
return this;
}
/**
* 以XX结尾
* @param name 参数名称
* @param value 参数值
* @return this
*/
@Override
public LogicBuilder ew(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.ew));
return this;
}
/**
* {@inheritDoc}
*/
@Override
public LogicBuilder in(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.in));
return this;
}
/**
* {@inheritDoc}
*/
@Override
public LogicBuilder nin(String name, Object value) {
addCondition(new ConditionExpression(name, queryAlias, value, QueryOperator.nin));
return this;
}
/**
* {@inheritDoc}
*/
@Override
public LogicBuilder isn(String name) {
addCondition(new ConditionExpression(name, queryAlias, null, QueryOperator.isn));
return this;
}
/**
* {@inheritDoc}
*/
@Override
public LogicBuilder inn(String name) {
addCondition(new ConditionExpression(name, queryAlias, null, QueryOperator.inn));
return this;
}
/**
*
* 条件逻辑组
*
* @return 新条件逻辑组
*/
@Override
public ExpressionBuilder group() {
ConditionGroup group = new ConditionGroup(this);
addCondition(group);
return group;
}
/**
* 返回parent
* @return parent
*/
@Override
public LogicBuilder getParent() {
return parent;
}
/**
* {@inheritDoc}
*/
@Override
public String build() {
StringBuilder result = new StringBuilder();
if (conditions.size() > 0) {
Expression last = conditions.get(conditions.size() - 1);
if (last instanceof LogicExpression) {
throw new BuilderException(((LogicExpression) last).getLogicOperator() + " 后没有跟条件表达式");
}
}
List availableConditions = new ArrayList();
List availableExpressions = new ArrayList();
for (Expression expression : conditions) {
String condition = expression.build();
if (StringUtils.isNotBlank(condition)) {
availableConditions.add(condition);
availableExpressions.add(expression);
} else {
if (availableExpressions.size() > 0) {
Expression pre = availableExpressions.get(availableExpressions.size() - 1);
if (pre instanceof LogicExpression) {
availableExpressions.remove(availableExpressions.size() - 1);
availableConditions.remove(availableConditions.size() - 1);
}
}
}
}
if (availableExpressions.size() > 0) {
if (availableExpressions.get(0) instanceof LogicExpression) {
availableExpressions.remove(0);
availableConditions.remove(0);
}
}
for (String condition : availableConditions) {
ConditionBuildUtils.appendCondition(result, condition);
}
if (result.length() > 0 && parent != null) {
return " ( " + result.toString() + " ) ";
} else {
return result.toString();
}
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public Object getParamValue() {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy