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