jpa框架中写sql语句时如何当where条件中参数值为空时不取值,不为空则取值作为where条件进行查询
时间: 2024-02-23 14:58:57 浏览: 21
在 JPA 框架中,可以使用 Criteria API 来构建动态查询语句,实现 where 条件中参数值为空时不取值,不为空则取值作为 where 条件进行查询的功能。示例如下:
```java
public List<User> getUsers(String name, Integer age) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
Root<User> root = criteriaQuery.from(User.class);
Predicate predicate = criteriaBuilder.conjunction();
if (StringUtils.isNotEmpty(name)) {
predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("name"), name));
}
if (age != null) {
predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("age"), age));
}
criteriaQuery.where(predicate);
TypedQuery<User> query = entityManager.createQuery(criteriaQuery);
return query.getResultList();
}
```
在上述示例中,使用 Criteria API 构建查询语句,通过 if 判断语句来实现参数值为空时不取值,不为空则取值作为 where 条件进行查询的功能。其中,Predicate 对象表示一个查询条件,通过 and 方法来拼接多个查询条件。最后,将 Predicate 对象传入 CriteriaQuery 的 where 方法中即可。