分页的实现

首先我们需要清楚的是,前台有后台的
/**
 * (这个分页的功能)前端要想后台请求的参数为:
 * page;当前页
 * rows:m每页大小
 * sortBy:排序字段
 * desc:是否为降序
 * key:查询的关键
 *
 * 后台要想前台响应的话,我们就需要有响应的结果即可
 * total:总条数
 * items:当前页数据
 * totalPage:有些还需要总页数。
 * @param 
 */
public class PageResult {
    private Long total;// 总条数
    private Long totalPage;// 总页数
    private List items;// 当前页数据

    public PageResult() {
    }

    public PageResult(Long total, List items) {
        this.total = total;
        this.items = items;
    }

    public PageResult(Long total, Long totalPage, List items) {
        this.total = total;
        this.totalPage = totalPage;
        this.items = items;
    }

    public Long getTotal() {
        return total;
    }

    public void setTotal(Long total) {
        this.total = total;
    }

    public List getItems() {
        return items;
    }

    public void setItems(List items) {
        this.items = items;
    }

    public Long getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Long totalPage) {
        this.totalPage = totalPage;
    }
}
@Autowired
private BrandService brandService;

/**
 * 后台向前台请求的三个参数(当前页数据,总条数,总页数)
 * @param  page(当前页) 每页大小(rows)sortBy(排序字段) desc(是否为降序) key(关键字)
 * @return total(int 总条数)  items(List 当前页数据)  totalPage(int 总页数)
 */
//前台我们根据url找到这个action。然后根据这些参数,最后我们返回给前台三个参数即可(将其封装到了一个对象里面)
@GetMapping("page")
public ResponseEntity> queryBrandByPage(
        @RequestParam(value = "page", defaultValue = "1") Integer page,
        @RequestParam(value = "rows", defaultValue = "5") Integer rows,
        @RequestParam(value = "sortBy", required = false) String sortBy,
        @RequestParam(value = "desc", defaultValue = "false") Boolean desc,
        @RequestParam(value = "key", required = false) String key)
        {
    //System.out.println("controller 的数据 page=>"+page+ "rows=>"+ rows+ "sortBy=>"+sortBy+ "desc=>"+ desc+"key=>"+key);
        PageResult result=brandService. queryBrandByPageAndSort(page,rows,sortBy,desc,key);
        if(result==null||result.getItems().size()<1){//这里的小于1,就是总当前页记录数为0的话
           return new  ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    return ResponseEntity.ok(result);
}

 

 @Autowired
    private BrandMapper brandMapper;
    public PageResult  queryBrandByPageAndSort(
            Integer page, Integer rows, String sortBy, Boolean desc, String key) {
        // 开始分页  page就是当前页(当前是第几页),rows就是页大小
        PageHelper.startPage(page, rows);//这个就是相当于 mysql的limit index,total
        //System.out.println("service 的数据 page=>"+page+ "rows=>"+ rows+ "sortBy=>"+sortBy+ "desc=>"+ desc+"key=>"+key);
        // 过滤
        Example example = new Example(Brand.class);
        //判断某字符串是否不为空且长度不为0且不由空白符(空格)构成
        if (StringUtils.isNotBlank(sortBy)) {
            // 排序
            String orderByClause = sortBy + (desc ? " DESC" : " ASC");
            example.setOrderByClause(orderByClause);
        }
        // 查询
        if (StringUtils.isNotBlank(key)) {
            example.createCriteria().orLike("name", key).orEqualTo("letter", key.toUpperCase());
        }
        // 查询
        List list = brandMapper.selectByExample(example);
//        for (Brand brand:list){
//            System.out.println("品牌"+brand);
//        }
        PageInfo pageInfo = new PageInfo<>(list);
        //System.out.println("这里我们输出的总条数为"+pageInfo.getTotal());


        // 返回结果
        return new PageResult<>(pageInfo.getTotal(), pageInfo.getList());
    }

你可能感兴趣的:(分页的实现)