spring data jpa之動態條件查詢(搜索)

前言

在開發的時候,我們難免會遇到搜索,接下來讓我們來實現搜索功能的實現。

思路

  1. 首先在Repository類上不僅要繼承JpaRepository,還要繼承JpaSpecificationExecutor這個類實現條件查詢。
  2. 在service的findAll方法中中new一個Specification方法,實現裏面的toPredicate方法。
  3. 排序的我們可以使用page = new PageRequest(pages-1, rows, sort); sort是我們自己封裝的方法。

基本代碼

 /***
     *
     * @param key 搜索關鍵詞
     * @param pages 第幾頁
     * @param rows 每頁幾條
     * @param desc 按照升序還是降序排列
     * @param sortBy 按照哪個字段排序
     * @return
     */
    @Override
    public Page<Brand> findBrandSearch(String key, Integer pages, Integer rows,
                                       boolean desc, String sortBy) {
        ArrayList<String> strings = new ArrayList<>();
        PageRequest page = null;
        if (desc) {
            if (sortBy.equals("id"))
                strings.add("id");
            if (sortBy.equals("letter"))
                strings.add("letter");
            Sort sort = new Sort(Sort.Direction.ASC, strings);
             page = new PageRequest(pages-1, rows, sort);

        }else
            page = new PageRequest(pages-1,rows);

        Page<Brand> list = brandRepository.findAll(new Specification<Brand>() {

            @Override
            public Predicate toPredicate(Root<Brand> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {

                ArrayList<Predicate> list = new ArrayList<>();
//                if (key != "" && key != null) {
                Predicate id = criteriaBuilder.like(root.get("id").as(String.class), key);
                Predicate name = criteriaBuilder.like(root.get("name").as(String.class), "%" + key + "%");
                Predicate letter = criteriaBuilder.like(root.get("letter").as(String.class), "%" + key + "%");


                list.add(id);
                list.add(name);
                list.add(letter);


//                }

                Predicate[] array = new Predicate[list.size()];
                Predicate[] predicates = list.toArray(array);

                return criteriaBuilder.or(predicates);
            }
        }, page);
        return list;
    }
}


人生的遺憾莫過於,輕易的放棄了不該放棄的,固執地堅持了不該堅持的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章