JPA 类型安全的查询

//编写类型安全的查询
//通过EntityManager或EntityManagerFactory的getCriteriaBuilder()创建 QueryBuilder的一个实例
//QueryBuilder不仅是 CriteriaQuery的工厂,同时也是查询表达式的工厂
CriteriaBuilder cb  = em.getCriteriaBuilder();
//在构造 CriteriaQuery时,可以传入各种结果类型参数 —— 从持久化实体(比如 SystemUser.class)到形式更加灵活的 Object[]。
CriteriaQuery cq = cb.createQuery(SystemUser.class);
//CriteriaQuery从SystemUser.class查询,返回Root root实例
//Root是一个查询表达式,它表示持久化实体的范围,这类似于 JPQL 或 SQL 查询的 FROM子句
//Root每个表达式都是泛型的,如Path path = root.get("age")
Root root = cq.from(SystemUser.class);
//查询表达式路径SystemUser.age
Path path = root.get("age");
//谓词
Predicate predicate = cb.gt(path, 100);
//设置where子句
cq.where(predicate);
//通过EntityManager创建一个可执行查询,参数为CriteriaQuery
//这类似于构造一个输入为 JPQL 字符串的可执行查询,但是由于输入 CriteriaQuery包含更多的类型信息,所以得到的结果是 TypedQuery
TypedQuery query = em.createQuery(cq);
List list = query.getResultList();

你可能感兴趣的:(JPA 类型安全的查询)