两步轻松传统的分页功能

业务背景:

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

技术背景:

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

核心实现方式:

1.实体封装:

/**
 * <p>ClassName:     PageModel
 * <p>Description:   分页实体封装
 * <p>Author         maqp
 * <p>Version        V1.1
 * <p>Date           2016/12/20
 */
@Data
public 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值