EntityManager带条件查询, 返回记录数和结果
时间: 2024-02-12 09:09:37 浏览: 74
下面是一个使用 EntityManager 带条件查询的示例,可以同时返回记录数和查询结果:
假设我们有一个实体类 User,现在要查询年龄在 20 到 30 之间的用户信息,可以使用 EntityManager 和 Criteria API 来实现:
```
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<User> cq = criteriaBuilder.createQuery(User.class);
Root<User> root = cq.from(User.class);
// 添加查询条件
Predicate agePredicate = criteriaBuilder.between(root.get("age"), 20, 30);
cq.where(agePredicate);
// 查询记录数
CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
countQuery.select(criteriaBuilder.count(countQuery.from(User.class)));
countQuery.where(agePredicate);
Long totalCount = entityManager.createQuery(countQuery).getSingleResult();
// 查询结果
cq.select(root);
TypedQuery<User> query = entityManager.createQuery(cq);
List<User> userList = query.getResultList();
```
以上代码中,首先获取 CriteriaBuilder 对象,然后创建 CriteriaQuery 对象并指定返回值类型为 User。接着使用 from 方法指定查询的实体类,并使用 where 方法添加查询条件,这里使用 between 方法指定年龄在 20 到 30 之间。
接下来,我们创建一个新的 CriteriaQuery 对象并指定返回值类型为 Long,使用 count 方法统计符合条件的数据总数。注意,这里也需要添加查询条件。最后,通过 createQuery 方法创建查询对象,使用 getSingleResult 方法获取统计结果。
最后,我们再次使用之前创建的 CriteriaQuery 对象,通过 select 方法指定查询结果为 User,使用 TypedQuery 对象获取查询结果,即可得到符合条件的用户信息列表。
阅读全文