springboot 根据a,b的值进行查询,如果a和b都为空,那么直接返回数据,如果a有b有,则将同样的实体类数据组合,怎么处理
时间: 2024-03-19 20:45:52 浏览: 16
可以使用 Spring Data JPA 中的 Specifications 来实现这个需求。
首先,定义一个 Specification:
```java
public static Specification<Entity> findByAAndB(String a, String b) {
return (root, query, criteriaBuilder) -> {
Predicate predicate = criteriaBuilder.conjunction();
if (StringUtils.isNotBlank(a)) {
predicate.getExpressions().add(criteriaBuilder.equal(root.get("a"), a));
}
if (StringUtils.isNotBlank(b)) {
predicate.getExpressions().add(criteriaBuilder.equal(root.get("b"), b));
}
return predicate;
};
}
```
然后,在 Repository 中使用该 Specification 进行查询:
```java
public List<Entity> findByAAndB(String a, String b) {
if (StringUtils.isBlank(a) && StringUtils.isBlank(b)) {
return findAll();
} else {
Specification<Entity> specification = findByAAndB(a, b);
return findAll(specification);
}
}
```
如果 a 和 b 都为空,则直接返回全部数据;如果 a 和 b 都有值,则使用 `and` 组合两个条件;如果只有其中一个有值,则只使用有值的条件进行查询。
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)