构建 CriteriaQuery 实例API说明
CriteriaBuilder 安全查询创建工厂
CriteriaBuilder
是一个工厂对象,可以从EntityManager
或EntityManagerFactory
类中获得。可以用于创建CriteriaQuery
、Predicate
等1
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery 安全查询主语句
CriteriaQuery
对象必须在实体类型或嵌入式类型上的Criteria
查询上起作用。它通过调用 CriteriaBuilder.createQuery
或CriteriaBuilder.createTupleQuery
等获得。1
CriteriaQuery<User> query = builder.createQuery(User.class);
Root 定义查询的 From 子句中能出现的类型
1 | // 获取 User 实体查询的根对象 |
Predicate 过滤条件
过滤条件应用到SQL语句的FROM子句中。
在Criteria
查询中,查询条件通过Predicate
或Expression
实例应用到CriteriaQuery
对象上。这些条件使用CriteriaQuery.where
方法应用到CriteriaQuery
对象上。
Predicate
对象通过调用CriteriaBuilder
的equal
、notEqual
、gt
、ge
、lt
、le
、between
、like
等方法创建。
Predicate
实例也可以用Expression
实例的isNull
、isNotNull
和in
方法获得,复合的Predicate
语句可以使用CriteriaBuilder
的and
、or
方法构建。1
2
3// 查询 id 大于10的用户
Predicate predicate = builder.gt(root.get("id"), 10);
query.where(predicate);
Expression
Expression
对象用在查询语句的select
、where
和having
子句中,该接口有isNull
、isNotNull
和in
方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 第一种
CriteriaQuery<User> query = builder.createQuery(User.class);
Root<User> root = query.from(User.class);
query.where(root.get("id").in(1, 5));
entityManager.createQuery(query).getResultList();
// select * from user where id in (1, 5)
// 第二种
Expression<String> exp = root.get("id");
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(5);
predicates.add(exp.in(list));
query.where(predicates.toArray(new Predicate[predicates.size()]));
// select * from user where id in (1, 5)
高级用法
复合查询
1 | // 使用 CriteriaQuery,查询年龄为10,且名字以 ts 开头的用户 |
1 | SELECT |