spring data jpa之动态条件查询(搜索)

二次信任 提交于 2020-02-28 06:01:07

前言

在开发的时候,我们难免会遇到搜索,接下来让我们来实现搜索功能的实现。

思路

  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;
    }
}


人生的遗憾莫过于,轻易的放弃了不该放弃的,固执地坚持了不该坚持的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!