新:新增条件组,用于处理复杂的where条件

This commit is contained in:
tjh 2022-01-20 16:28:08 +08:00
parent 8c20364c2c
commit 4447bb18d4
2 changed files with 77 additions and 0 deletions

View File

@ -0,0 +1,51 @@
package cn.hutool.db.sql;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import java.util.List;
/**
* 条件组<br/>
* 用于构建复杂where条件
*
* @author tjh
*/
public class ConditionGroup extends Condition{
/**
* 条件列表
*/
private Condition[] conditions;
/**
* 追加条件
*
* @param conditions 条件列表
*/
public void addConditions(Condition... conditions) {
if(null == this.conditions) {
this.conditions = conditions;
} else {
this.conditions = ArrayUtil.addAll(this.conditions, conditions);
}
}
/**
* 将条件组转换为条件字符串使用括号包裹并回填占位符对应的参数值
*
* @param paramValues 参数列表用于回填占位符对应参数值
* @return 条件字符串
*/
@Override
public String toString(List<Object> paramValues) {
if (ArrayUtil.isEmpty(conditions)) return StrUtil.EMPTY;
final StringBuilder conditionStrBuilder = StrUtil.builder();
conditionStrBuilder.append("(");
// 将组内的条件构造为SQL因为toString会进行递归处理所有的条件组
conditionStrBuilder.append(ConditionBuilder.of(this.conditions).build(paramValues));
conditionStrBuilder.append(")");
return conditionStrBuilder.toString();
}
}

View File

@ -0,0 +1,26 @@
package cn.hutool.db.sql;
import org.junit.Test;
public class ConditionGroupTest {
@Test
public void ConditionGroupToStringTest() {
Condition condition1 = new Condition("a", "A");
Condition condition2 = new Condition("b", "B");
condition2.setLinkOperator(LogicalOperator.OR);
Condition condition3 = new Condition("c", "C");
Condition condition4 = new Condition("d", "D");
ConditionGroup cg = new ConditionGroup();
cg.addConditions(condition1, condition2);
// 条件组嵌套情况
ConditionGroup cg2 = new ConditionGroup();
cg2.addConditions(cg, condition3);
final ConditionBuilder conditionBuilder = ConditionBuilder.of(cg2, condition4);
System.out.println(conditionBuilder.build());
System.out.println(conditionBuilder.getParamValues());
}
}