feat: 优化条件的构造
This commit is contained in:
@@ -127,15 +127,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> 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<ENTITY extends SimpleEntity> implemen
|
||||
*/
|
||||
@Override
|
||||
public List<ENTITY> 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<ENTITY extends SimpleEntity> implemen
|
||||
public List<ENTITY> list(Set<Long> 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<ENTITY extends SimpleEntity> implemen
|
||||
* @return List<Predicate> 返回构建的谓词列表
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
protected List<Predicate> queryPredicates(Query.Queryable queryable, Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
||||
protected Predicate queryPredicates(Query.Queryable queryable, Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
||||
var predicates = new ArrayList<Predicate>();
|
||||
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<ENTITY extends SimpleEntity> implemen
|
||||
predicates.add(builder.between(column(root, column), (Comparable<Object>) value.getStart(), (Comparable<Object>) 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<ENTITY extends SimpleEntity> implemen
|
||||
* @param builder JPA Criteria构建器
|
||||
* @return List<Predicate> 返回查询条件谓词列表
|
||||
*/
|
||||
protected List<Predicate> listPredicate(Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
||||
return new ArrayList<>(0);
|
||||
protected Predicate listPredicate(Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -483,9 +472,11 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> 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<ENTITY extends SimpleEntity> 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);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user