feat: 优化条件的构造
This commit is contained in:
@@ -127,15 +127,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Long count() {
|
public Long count() {
|
||||||
return repository.count(
|
return repository.count(this::listPredicate);
|
||||||
(root, query, builder) ->
|
|
||||||
builder.and(
|
|
||||||
listPredicate(root, query, builder)
|
|
||||||
.stream()
|
|
||||||
.filter(ObjectHelper::isNotNull)
|
|
||||||
.toArray(Predicate[]::new)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -148,15 +140,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<ENTITY> list() {
|
public List<ENTITY> list() {
|
||||||
return repository.findAll(
|
return repository.findAll(this::listPredicate);
|
||||||
(root, query, builder) ->
|
|
||||||
builder.and(
|
|
||||||
listPredicate(root, query, builder)
|
|
||||||
.stream()
|
|
||||||
.filter(ObjectHelper::isNotNull)
|
|
||||||
.toArray(Predicate[]::new)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -172,9 +156,11 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
public List<ENTITY> list(Set<Long> ids) {
|
public List<ENTITY> list(Set<Long> ids) {
|
||||||
return repository.findAll(
|
return repository.findAll(
|
||||||
(root, query, builder) -> {
|
(root, query, builder) -> {
|
||||||
var predicates = listPredicate(root, query, builder);
|
var predicate = listPredicate(root, query, builder);
|
||||||
predicates.add(builder.in(root.get(IdOnlyEntity.Fields.id)).value(ids));
|
var idsPredicate = builder.in(root.get(IdOnlyEntity.Fields.id)).value(ids);
|
||||||
return builder.and(predicates.stream().filter(ObjectHelper::isNotNull).toArray(Predicate[]::new));
|
return ObjectHelper.isNull(predicate)
|
||||||
|
? idsPredicate
|
||||||
|
: builder.and(predicate, idsPredicate);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -245,10 +231,10 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
* @return List<Predicate> 返回构建的谓词列表
|
* @return List<Predicate> 返回构建的谓词列表
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@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>();
|
var predicates = new ArrayList<Predicate>();
|
||||||
if (ObjectHelper.isNull(queryable)) {
|
if (ObjectHelper.isNull(queryable)) {
|
||||||
return predicates;
|
return null;
|
||||||
}
|
}
|
||||||
if (ObjectHelper.isNotEmpty(queryable.getNullEqual())) {
|
if (ObjectHelper.isNotEmpty(queryable.getNullEqual())) {
|
||||||
queryable.getNullEqual().forEach(column -> predicates.add(builder.isNull(column(root, column))));
|
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());
|
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构建器
|
* @param builder JPA Criteria构建器
|
||||||
* @return List<Predicate> 返回查询条件谓词列表
|
* @return List<Predicate> 返回查询条件谓词列表
|
||||||
*/
|
*/
|
||||||
protected List<Predicate> listPredicate(Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
protected Predicate listPredicate(Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
||||||
return new ArrayList<>(0);
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -483,9 +472,11 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
}
|
}
|
||||||
return repository.findAll(
|
return repository.findAll(
|
||||||
(root, query, builder) -> {
|
(root, query, builder) -> {
|
||||||
var predicates = listPredicate(root, query, builder);
|
var predicate = listPredicate(root, query, builder);
|
||||||
predicates.addAll(queryPredicates(listQuery.getQuery(), root, query, builder));
|
var queryPredicate = queryPredicates(listQuery.getQuery(), root, query, builder);
|
||||||
return builder.and(predicates.stream().filter(ObjectHelper::isNotNull).toArray(Predicate[]::new));
|
return ObjectHelper.isNull(predicate)
|
||||||
|
? queryPredicate
|
||||||
|
: builder.and(predicate, queryPredicate);
|
||||||
},
|
},
|
||||||
pageRequest
|
pageRequest
|
||||||
);
|
);
|
||||||
@@ -507,9 +498,11 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
|||||||
}
|
}
|
||||||
return repository.findOne(
|
return repository.findOne(
|
||||||
(root, query, builder) -> {
|
(root, query, builder) -> {
|
||||||
var predicates = listPredicate(root, query, builder);
|
var predicate = listPredicate(root, query, builder);
|
||||||
predicates.add(builder.equal(root.get(IdOnlyEntity.Fields.id), id));
|
var idPredicate = builder.equal(root.get(IdOnlyEntity.Fields.id), id);
|
||||||
return builder.and(predicates.stream().filter(ObjectHelper::isNotNull).toArray(Predicate[]::new));
|
return ObjectHelper.isNull(predicate)
|
||||||
|
? idPredicate
|
||||||
|
: builder.and(predicate, idPredicate);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user