mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
新:新增条件组,用于处理复杂的where条件
This commit is contained in:
parent
8c20364c2c
commit
4447bb18d4
51
hutool-db/src/main/java/cn/hutool/db/sql/ConditionGroup.java
Normal file
51
hutool-db/src/main/java/cn/hutool/db/sql/ConditionGroup.java
Normal 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();
|
||||
}
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user