springboot分页查询,实现一个三个条件搜索框查询数据与分页展示的前台页面的后台接口

需求分析:前端页面效果如下

由于项目中要设计很多页面的分页,所以我们可以把分页的一些类和方法设为工具类

public class PageResult<T> implements Serializable {
    private static final long serialVersionUID = -3644950655568598241L;
    private long total;
    private List<T> rows;
    public PageResult() {
    }
    public PageResult(long total, List<T> rows) {
        this.total = total;
        this.rows = rows;
    }
    public PageResult(Page<T> page){
        this.rows=page.getContent();
        this.total=page.getTotalElements();
    }
    public long getTotal() {
        return total;
    }
    public void setTotal(long total) {
        this.total = total;
    }
    public List<T> getRows() {
        return rows;
    }
    public void setRows(List<T> rows) {
        this.rows = rows;
    }
}
/**
 * 获取分页请求
 * @return
 */
protected PageRequest getPageRequest(){
   int page = 1;
   int size = 10;
   Sort sort = null;
   try {
      String sortName = request.getParameter("sort");
      if (sortName == null)
      {
         sortName = "id";
      }
      String sortOrder = request.getParameter("sortOrder");
      if (sortOrder == null)
      {
         sortOrder = "asc";
      }
      if(StringUtils.isNoneBlank(sortName) && StringUtils.isNoneBlank(sortOrder)){
         if("desc".equalsIgnoreCase(sortOrder)){
            sort = Sort.by(Sort.Direction.DESC, sortName);
         }else{
            sort = Sort.by(Sort.Direction.ASC, sortName);
         }
      }
      if (request.getParameter("page") == null)
      {
         page =0;
      }
      else {
         page = Integer.parseInt(request.getParameter("page")) - 1;
      }
      if (request.getParameter("rows") == null)
      {
         size=10;
      }
      else
      {
         size = Integer.parseInt(request.getParameter("rows"));

      }
   } catch (Exception e) {
      e.printStackTrace();
   }
   PageRequest pageRequest = PageRequest.of(page, size,sort);
   return pageRequest;
}
public interface Pageable {
    static Pageable unpaged() {
        return Unpaged.INSTANCE;
    }

    default boolean isPaged() {
        return true;
    }

    default boolean isUnpaged() {
        return !this.isPaged();
    }

    int getPageNumber();

    int getPageSize();

    long getOffset();

    Sort getSort();

    default Sort getSortOr(Sort sort) {
        Assert.notNull(sort, "Fallback Sort must not be null!");
        return this.getSort().isSorted() ? this.getSort() : sort;
    }

    Pageable next();

    Pageable previousOrFirst();

    Pageable first();

    boolean hasPrevious();

    default Optional<Pageable> toOptional() {
        return this.isUnpaged() ? Optional.empty() : Optional.of(this);
    }
}

controller 层:

@RequestMapping(value = "/selectPeopleManage", method = RequestMethod.GET)
public PageResult<Map<String, Object>> selectPeopleManage(String name, String organization,String job) { 
//getPageRequest()这是获取分页请求的方法
Page<Map<String, Object>> bookedList = mapManageService.selectPersonManage(name,organization,job,getPageRequest());
    return new PageResult(bookedList);
}

service 层:

Page<Map<String, Object>>  selectPersonManage(String name, String organization,String job,Pageable pageable);

serviceImpl 层:

@Override
public Page<Map<String, Object>> selectPersonManage(String name, String organization, String job, Pageable pageable) {
  //前台搜索的三个条件
    name=(name==null?"":name);
    organization=(organization==null?"":organization);
    job=(job==null?"":job);
    return mapPeopleManageRepository.getPeopleManageListAll( "%"+name+"%", "%"+organization+"%", "%"+job+"%", pageable);
}
Repository 层:(jpa)
@Query(value = "SELECT * from map_people_manage WHERE (name like ?1  and organization like ?2  and job like ?3 )",nativeQuery = true)
Page<Map<String, Object>> getPeopleManageListAll (String name, String organization, String job, Pageable pageable);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值