From 7b31aead91313eb5d2bcdcae1815a3fbf815e6e1 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Thu, 21 Aug 2025 11:01:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E5=88=A4=E6=96=AD=E7=9A=84=E7=AE=80=E4=BE=BF=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/template/controller/Query.java | 24 ++++++++++ .../service/SimpleServiceSupport.java | 44 ++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java b/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java index 115e7ce..cd767d1 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/controller/Query.java @@ -122,6 +122,30 @@ public class Query { * 指定字段不模糊匹配的条件映射(字段名 -> 匹配值) */ private Map notLike; + /** + * 指定字段包含指定字符串的条件映射(字段名 -> 包含值) + */ + private Map contain; + /** + * 指定字段不包含指定字符串的条件映射(字段名 -> 不包含值) + */ + private Map notContain; + /** + * 指定字段以指定字符串开头的条件映射(字段名 -> 开头值) + */ + private Map startWith; + /** + * 指定字段不以指定字符串开头的条件映射(字段名 -> 不开头值) + */ + private Map notStartWith; + /** + * 指定字段以指定字符串结尾的条件映射(字段名 -> 结尾值) + */ + private Map endWith; + /** + * 指定字段不以指定字符串结尾的条件映射(字段名 -> 不结尾值) + */ + private Map notEndWith; /** * 指定字段大于条件的映射(字段名 -> 值) */ diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java index e47084e..96609e2 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java @@ -182,7 +182,7 @@ public abstract class SimpleServiceSupport implemen if (ObjectHelper.isEmpty(column)) { throw new IllegalArgumentException("Column cannot be blank"); } - var columns = column.split("/"); + var columns = column.split("\\."); Path path = root.get(columns[0]); for (int i = 1; i < columns.length; i++) { path = path.get(columns[i]); @@ -282,6 +282,48 @@ public abstract class SimpleServiceSupport implemen predicates.add(builder.notLike(column(root, column), value)); }); } + if (ObjectHelper.isNotEmpty(queryable.getContain())) { + queryable.getContain().forEach((column, value) -> { + var path = this.column(root, column); + checkString(path, value, column); + predicates.add(builder.like(column(root, column), "%" + value + "%")); + }); + } + if (ObjectHelper.isNotEmpty(queryable.getNotContain())) { + queryable.getNotContain().forEach((column, value) -> { + var path = this.column(root, column); + checkString(path, value, column); + predicates.add(builder.notLike(column(root, column), "%" + value + "%")); + }); + } + if (ObjectHelper.isNotEmpty(queryable.getStartWith())) { + queryable.getStartWith().forEach((column, value) -> { + var path = this.column(root, column); + checkString(path, value, column); + predicates.add(builder.like(column(root, column), value + "%")); + }); + } + if (ObjectHelper.isNotEmpty(queryable.getNotStartWith())) { + queryable.getNotStartWith().forEach((column, value) -> { + var path = this.column(root, column); + checkString(path, value, column); + predicates.add(builder.notLike(column(root, column), value + "%")); + }); + } + if (ObjectHelper.isNotEmpty(queryable.getEndWith())) { + queryable.getEndWith().forEach((column, value) -> { + var path = this.column(root, column); + checkString(path, value, column); + predicates.add(builder.like(column(root, column), "%" + value)); + }); + } + if (ObjectHelper.isNotEmpty(queryable.getNotEndWith())) { + queryable.getNotEndWith().forEach((column, value) -> { + var path = this.column(root, column); + checkString(path, value, column); + predicates.add(builder.notLike(column(root, column), "%" + value)); + }); + } if (ObjectHelper.isNotEmpty(queryable.getGreat())) { queryable.getGreat().forEach((column, value) -> { var path = this.>column(root, column);