From 4447bb18d420c9e5b36e50485a2502b99b7865ec Mon Sep 17 00:00:00 2001 From: tjh Date: Thu, 20 Jan 2022 16:28:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=EF=BC=9A=E6=96=B0=E5=A2=9E=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=E7=BB=84=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=A4=8D=E6=9D=82=E7=9A=84where=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/db/sql/ConditionGroup.java | 51 +++++++++++++++++++ .../cn/hutool/db/sql/ConditionGroupTest.java | 26 ++++++++++ 2 files changed, 77 insertions(+) create mode 100644 hutool-db/src/main/java/cn/hutool/db/sql/ConditionGroup.java create mode 100644 hutool-db/src/test/java/cn/hutool/db/sql/ConditionGroupTest.java diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/ConditionGroup.java b/hutool-db/src/main/java/cn/hutool/db/sql/ConditionGroup.java new file mode 100644 index 000000000..33467287a --- /dev/null +++ b/hutool-db/src/main/java/cn/hutool/db/sql/ConditionGroup.java @@ -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; + +/** + * 条件组
+ * 用于构建复杂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 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(); + } +} diff --git a/hutool-db/src/test/java/cn/hutool/db/sql/ConditionGroupTest.java b/hutool-db/src/test/java/cn/hutool/db/sql/ConditionGroupTest.java new file mode 100644 index 000000000..3c48c2218 --- /dev/null +++ b/hutool-db/src/test/java/cn/hutool/db/sql/ConditionGroupTest.java @@ -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()); + } +}