Jpa的条件查询和分页

简介

习惯了使用mybtais操作数据库。今天,尝试了下jpa的操作,但是遇到个问题,jpa的条件查询和分页查询该如何使用呢。不要慌,老司机带你灵活使用jpa的高级玩法,废话不多说,直接上代码最干脆,也是最方便的办法。

  • 1、DAO层继承JpaSpecificationExecutor接口(当然,如果需要JpaRepository相关方法,同时继承即可)
    继承JpaSpecificationExecutor类接口,
public interface AdminAccountRepository extends JpaRepository,JpaSpecificationExecutor  {
}

通过查看源码我们发现:

public interface JpaSpecificationExecutor {
    T findOne(Specification var1);

    List findAll(Specification var1);

    Page findAll(Specification var1, Pageable var2);

    List findAll(Specification var1, Sort var2);

    long count(Specification var1);
}

有没有啥发现,不用我多说了吧。

  • 2、Service构造查询条件,并调用DAO层:
    public Page findAdmin(String username, String password) {
        Pageable pageable = new PageRequest(1, 2, Sort.Direction.ASC, "id");

        Specification specification = new Specification() {
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder cb) {
                List list = new ArrayList();

                if (!StringUtils.isEmpty(username)) {
                    list.add(cb.like(root.get("username").as(String.class), "%" + username + "%"));
                }

                if (!StringUtils.isEmpty(password)) {
                    list.add(cb.equal(root.get("password").as(String.class), password));
                }
                return cb.and(list.toArray(new Predicate[list.size()]));
            }
        };


        Page adminAccounts = adminRepository.findAll(specification, pageable);

        return adminAccounts;

    }

通过以上两个步骤,就可以简单的实现分页和条件查询。是不是很简单。至于更深度的代码需要读者们自己去探索。

你可能感兴趣的:(Jpa的条件查询和分页)