美文网首页
Jpa的条件查询和分页

Jpa的条件查询和分页

作者: 黑客和白帽子的故事 | 来源:发表于2018-03-28 14:08 被阅读0次

    简介

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

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

    通过查看源码我们发现:

    public interface JpaSpecificationExecutor<T> {
        T findOne(Specification<T> var1);
    
        List<T> findAll(Specification<T> var1);
    
        Page<T> findAll(Specification<T> var1, Pageable var2);
    
        List<T> findAll(Specification<T> var1, Sort var2);
    
        long count(Specification<T> var1);
    }
    

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

    • 2、Service构造查询条件,并调用DAO层:
        public Page<AdminAccount> findAdmin(String username, String password) {
            Pageable pageable = new PageRequest(1, 2, Sort.Direction.ASC, "id");
    
            Specification<AdminAccount> specification = new Specification<AdminAccount>() {
                @Override
                public Predicate toPredicate(Root<AdminAccount> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
                    List<Predicate> list = new ArrayList<Predicate>();
    
                    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<AdminAccount> adminAccounts = adminRepository.findAll(specification, pageable);
    
            return adminAccounts;
    
        }
    

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

    相关文章

      网友评论

          本文标题:Jpa的条件查询和分页

          本文链接:https://www.haomeiwen.com/subject/ybiycftx.html