两步轻松传统的分页功能

来源:互联网 发布:达芬奇密码的算法图解 编辑:程序博客网 时间:2024/06/07 12:43

业务背景:

现在的公司是创业型的公司,同时也是创新型的公司,很多功能都不是很全面.于是就不得不一遍做业务一边丰富某些基本的功能.前几天做了一个分页功能,虽然我封装的不是很好,但是个人感觉还很简单,如有需要的童鞋可以直接在这个基础上启发一下改造成自己的功能.而且如果有大神可以指出改进方案,感激不尽.

技术背景:

公司的持久层环境是mybatis,框架用的是SpringBoot.框架层次用的是简单的三层:Controller/service/dao,面向接口的restful编程风格

核心实现方式:

1.实体封装:

/** * <p>ClassName:     PageModel * <p>Description:   分页实体封装 * <p>Author         maqp * <p>Version        V1.1 * <p>Date           2016/12/20 */@Datapublic class PageModel {    private Integer pageSize;//每页大小(参数)    private Integer recordSize;//总记录条数    private Integer currentPage;//当前显示页数(参数)    private List<?> dataList;//每页数据


2.mybatis实现模板:

        select *        from(            select                    ROW_NUMBER () OVER(order by detail_list_id ) as row_Num,                    *            from                (-----------------------------------这里是带分页的内容,外层是分页实现-----------------select                    *                 from                    tableName-------------------------------------------------------------------------------------      )as t1        )as t2       where row_Num between #{start} and #{end}

    <select id="findTotal" resultType="int">      select COUNT(*) from dispatch_material_detail_list    </select>

第一个是用作查询固定页数的从第几条到第几条记录数,

第一个sql是为了求总的记录数,用来求一共多少页.

完整demo:

    //Service层:部分核心代码
    public PageModel showAll(int pageSize, int currentSize) {        List<xxxDto> xxDtos=new ArrayList<>();        int start,end;        start=(currentSize-1)*pageSize+1;        end=currentSize*pageSize;        List<xxxModel> listModels=xxDao.showAll(start,end);
        int totalRecords=xxDao.findTotal();
        if (listModels!=null &&!listModels.isEmpty()&&totalRecords>0){            PageModel pageModel=new PageModel();            pageModel.setCurrentPage(currentSize);            pageModel.setPageSize(pageSize);            pageModel.setRecordSize(totalRecords);
            for (xxxModel xxModel :listModels){                xxxDto xxDto=new xxxtDto();                copyProperties(xxModel,xxDto);                listDtos.add(xxDto);            }            pageModel.setDataList(xxDtos);            return pageModel;        }        return null;    }



其中的dao层的实现是用mybatis实现的,dao层的接口,很简单,就不做多说,不知道的可以Q我.以上是service层的实现,接口不做多说.下面是Controller层核心代码

  //Controller层核心代码
  @RequestMapping(value="/showAll",method=RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)    public PageModel showAll(@RequestParam Integer pageSize, @RequestParam Integer currentPage){        if(pageSize==null || pageSize<=0){            pageSize=20;        }        if(currentPage==null || currentPage<=0){            currentPage=1;        }        PageModel pageModel=xxxService.showAll(pageSize,currentPage);        if(pageModel!=null && pageModel.getRecordSize()>=1){            return pageModel;        }        return null;    }


0 0