From 116dc148f2c4cf7654b44a068fe8cdabfa459026 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Tue, 6 Jan 2026 10:58:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(jpa):=20=E5=A2=9E=E5=8A=A0=E7=A9=BA?= =?UTF-8?q?=E5=80=BC=E6=A3=80=E6=9F=A5=E5=B9=B6=E4=BC=98=E5=8C=96=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 list 方法中增加空集合检查,避免无效查询 - 在 value 方法中增加空值检查,直接返回 null - 重构查询条件处理逻辑,复用 path 变量减少重复调用 --- .../jpa/service/SimpleServiceSupport.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/service/SimpleServiceSupport.java b/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/service/SimpleServiceSupport.java index eae211c..09cf67c 100644 --- a/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/service/SimpleServiceSupport.java +++ b/spring-boot-service-template-jpa/src/main/java/com/lanyuanxiaoyao/service/template/jpa/service/SimpleServiceSupport.java @@ -177,6 +177,9 @@ public abstract class SimpleServiceSupport implemen */ @Override public List list(Set ids) { + if (ObjectHelper.isEmpty(ids)) { + return List.of(); + } return repository.findAll( (root, query, builder) -> { var predicate = listPredicate(root, query, builder); @@ -228,6 +231,9 @@ public abstract class SimpleServiceSupport implemen */ @SuppressWarnings({"unchecked", "rawtypes"}) private Object value(Path column, Object value) { + if (ObjectHelper.isNull(value)) { + return null; + } var javaType = column.getJavaType(); if (javaType.isEnum()) { if (value instanceof String enumName) { @@ -295,58 +301,58 @@ public abstract class SimpleServiceSupport implemen } if (ObjectHelper.isNotEmpty(queryable.getLike())) { queryable.getLike().forEach((column, value) -> { - var path = column(root, column); + var path = this.column(root, column); checkString(path, value, column); - predicates.add(builder.like(column(root, column), value)); + predicates.add(builder.like(path, value)); }); } if (ObjectHelper.isNotEmpty(queryable.getNotLike())) { queryable.getNotLike().forEach((column, value) -> { - var path = column(root, column); + var path = this.column(root, column); checkString(path, value, column); - predicates.add(builder.notLike(column(root, column), value)); + predicates.add(builder.notLike(path, 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 + "%")); + predicates.add(builder.like(path, "%" + 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 + "%")); + predicates.add(builder.notLike(path, "%" + 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 + "%")); + predicates.add(builder.like(path, 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 + "%")); + predicates.add(builder.notLike(path, 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)); + predicates.add(builder.like(path, "%" + 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)); + predicates.add(builder.notLike(path, "%" + value)); }); } if (ObjectHelper.isNotEmpty(queryable.getGreat())) { @@ -395,14 +401,14 @@ public abstract class SimpleServiceSupport implemen queryable.getBetween().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.between(column(root, column), (Comparable) value(path, value.getStart()), (Comparable) value(path, value.getEnd()))); + predicates.add(builder.between(path, (Comparable) value(path, value.getStart()), (Comparable) value(path, value.getEnd()))); }); } if (ObjectHelper.isNotEmpty(queryable.getNotBetween())) { queryable.getNotBetween().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.between(column(root, column), (Comparable) value(path, value.getStart()), (Comparable) value(path, value.getEnd())).not()); + predicates.add(builder.between(path, (Comparable) value(path, value.getStart()), (Comparable) value(path, value.getEnd())).not()); }); }