Spring Boot -- Spring Data Jpa(5)

来源:互联网 发布:网络群众路线问责 编辑:程序博客网 时间:2024/05/27 10:43

在Spring Data Jpa中使用Criteria查询.

@PersistenceContextEntityManager em;@Overridepublic Employee findOne(Long id) {    CriteriaBuilder cb = em.getCriteriaBuilder();    CriteriaQuery<Employee> query = cb.createQuery(Employee.class);    Root<Employee> root = query.from(Employee.class);    query.where(cb.equal(root.get("id"), id))        .select(root);    Employee e = em.createQuery(query).getSingleResult();    return e;}

搜索条件(where)

通过CriteriaQuery.where()添加搜索条件.

CriteriaQuery CriteriaQuery.where(Predicate...predicate)

CriteriaBuilder中有各种产生Predicate对象的方法.

  • and()
  • or()
  • not()
  • isTrue()
  • isFalse()
  • isNull()
  • isNotNull()
  • equal()
  • notEqual()
  • greaterThan()
  • greaterThanOrEqualTo()
  • lessThan()
  • lessThanOrEqualTo()
  • between()
  • gt()
  • ge()
  • lt()
  • le()
  • isEmpty()
  • isNotEmpty()
  • isMember()
  • isNotMember()
  • like()
  • notLike()

多个搜索条件
Example01:

Predicate[] p = {    cb.isTrue(root.get("sex")),    cb.ge(root.get("age"), 15)};query.where(p);


Example02:

Predicate p = cb.and(    cb.isTrue(root.get("sex")),    cb.ge(root.get("age"), 15));query.where(p);

Example03:

query.where(    cb.isTrue(root.get("sex")),    cb.ge(root.get("age"), 15));

动态条件

List<Predicate> pList = new ArrayList<>();if(sex != null){    pList.add(cb.equal(root.get("sex"), sex));}if(age != null){    pList.add(cb.ge(root.get("age"), age));}Predicate[] p = pList.toArray(new Predicate[pList.size()]);query.where(p);

排序(orderby)

通过CriteriaQuery.orderby()添加排序规则

CriteriaQuery CriteriaQuery.orderBy(Order... o)CriteriaQuery CriteriaQuery.orderBy(List<Order> o)Order CriteriaBuilder.asc()Order CriteriaBuilder.desc()

Example:

query.orderBy(cb.asc(root.get("id")));

查询字段(select)

CriteriaQuery.select()或CriteriaQuery.multiselect()

分组(groupby)

CriteriaQuery.groupBy()

筛选(having)

CriteriaQuery.having()

Result

Employee employee = em.createQuery(query.select(root)).getSingleResult();List<Employee> list = em.createQuery(query.select(root)).getResultList();

分页

    List<Employee> list = em.createQuery(query.select(root))            .setFirstResult(0)            .setMaxResults(10)            .getResultList();