前言
在开发的时候,我们难免会遇到搜索,接下来让我们来实现搜索功能的实现。
思路
- 首先在Repository类上不仅要继承JpaRepository,还要继承JpaSpecificationExecutor这个类实现条件查询。
- 在service的findAll方法中中new一个Specification方法,实现里面的toPredicate方法。
- 排序的我们可以使用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;
}
}
人生的遗憾莫过于,轻易的放弃了不该放弃的,固执地坚持了不该坚持的。
来源:CSDN
作者:逸羽菲
链接:https://blog.csdn.net/qq_41346335/article/details/104533568