From 1a08b01e08965d122012323b81a3548cc68b2340 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Sun, 17 Aug 2025 23:01:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=9E=84=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SimpleServiceSupport.java | 57 ++++++++----------- 1 file changed, 25 insertions(+), 32 deletions(-) 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 8aa0e16..a30b12f 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java @@ -127,15 +127,7 @@ public abstract class SimpleServiceSupport implemen */ @Override public Long count() { - return repository.count( - (root, query, builder) -> - builder.and( - listPredicate(root, query, builder) - .stream() - .filter(ObjectHelper::isNotNull) - .toArray(Predicate[]::new) - ) - ); + return repository.count(this::listPredicate); } /** @@ -148,15 +140,7 @@ public abstract class SimpleServiceSupport implemen */ @Override public List list() { - return repository.findAll( - (root, query, builder) -> - builder.and( - listPredicate(root, query, builder) - .stream() - .filter(ObjectHelper::isNotNull) - .toArray(Predicate[]::new) - ) - ); + return repository.findAll(this::listPredicate); } /** @@ -172,9 +156,11 @@ public abstract class SimpleServiceSupport implemen public List list(Set ids) { return repository.findAll( (root, query, builder) -> { - var predicates = listPredicate(root, query, builder); - predicates.add(builder.in(root.get(IdOnlyEntity.Fields.id)).value(ids)); - return builder.and(predicates.stream().filter(ObjectHelper::isNotNull).toArray(Predicate[]::new)); + var predicate = listPredicate(root, query, builder); + var idsPredicate = builder.in(root.get(IdOnlyEntity.Fields.id)).value(ids); + return ObjectHelper.isNull(predicate) + ? idsPredicate + : builder.and(predicate, idsPredicate); } ); } @@ -245,10 +231,10 @@ public abstract class SimpleServiceSupport implemen * @return List 返回构建的谓词列表 */ @SuppressWarnings("unchecked") - protected List queryPredicates(Query.Queryable queryable, Root root, CriteriaQuery query, CriteriaBuilder builder) { + protected Predicate queryPredicates(Query.Queryable queryable, Root root, CriteriaQuery query, CriteriaBuilder builder) { var predicates = new ArrayList(); if (ObjectHelper.isNull(queryable)) { - return predicates; + return null; } if (ObjectHelper.isNotEmpty(queryable.getNullEqual())) { queryable.getNullEqual().forEach(column -> predicates.add(builder.isNull(column(root, column)))); @@ -352,7 +338,10 @@ public abstract class SimpleServiceSupport implemen predicates.add(builder.between(column(root, column), (Comparable) value.getStart(), (Comparable) value.getEnd()).not()); }); } - return predicates; + + return predicates.size() == 1 + ? predicates.get(0) + : builder.and(predicates.toArray(Predicate[]::new)); } /** @@ -457,8 +446,8 @@ public abstract class SimpleServiceSupport implemen * @param builder JPA Criteria构建器 * @return List 返回查询条件谓词列表 */ - protected List listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { - return new ArrayList<>(0); + protected Predicate listPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { + return null; } /** @@ -483,9 +472,11 @@ public abstract class SimpleServiceSupport implemen } return repository.findAll( (root, query, builder) -> { - var predicates = listPredicate(root, query, builder); - predicates.addAll(queryPredicates(listQuery.getQuery(), root, query, builder)); - return builder.and(predicates.stream().filter(ObjectHelper::isNotNull).toArray(Predicate[]::new)); + var predicate = listPredicate(root, query, builder); + var queryPredicate = queryPredicates(listQuery.getQuery(), root, query, builder); + return ObjectHelper.isNull(predicate) + ? queryPredicate + : builder.and(predicate, queryPredicate); }, pageRequest ); @@ -507,9 +498,11 @@ public abstract class SimpleServiceSupport implemen } return repository.findOne( (root, query, builder) -> { - var predicates = listPredicate(root, query, builder); - predicates.add(builder.equal(root.get(IdOnlyEntity.Fields.id), id)); - return builder.and(predicates.stream().filter(ObjectHelper::isNotNull).toArray(Predicate[]::new)); + var predicate = listPredicate(root, query, builder); + var idPredicate = builder.equal(root.get(IdOnlyEntity.Fields.id), id); + return ObjectHelper.isNull(predicate) + ? idPredicate + : builder.and(predicate, idPredicate); } ); }