1.依赖
<!--https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
<!--存在版本兼容性问题,不建议用此方式
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.2</version>
</dependency>-->
2.yml文件配置
pagehelper:
helperDialect: mysql
#开启优化,如果开启优化,在分页页码结果没有数据的时候,会显示有数据的页码数据
reasonable: true
#是否支持接口参数来传递分页参数,默认false
supportMethodsArguments: true
params: count=countSql
3.使用举例
3.1.直接在查询接口上一行加上
//只对下一行的查询有效,其中1是pageNum,10是pageSize
PageHelper.startPage(1, 10);
3.2.在查询接口入参里面同时含有pageNum与pageSize的属性也会有分页效果
分页信息实体类
public class PageResult {
/**
* 当前页码
*/
private int pageNum;
/**
* 每页数量
*/
private int pageSize;
/**
* 记录总数
*/
private long totalSize;
/**
* 页码总数
*/
private int totalPages;
/**
* 分页数据
*/
private List<?> content;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getTotalSize() {
return totalSize;
}
public void setTotalSize(long totalSize) {
this.totalSize = totalSize;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public List<?> getContent() {
return content;
}
public void setContent(List<?> content) {
this.content = content;
}
public static PageResult getInstance(List list) {
Page page = (Page) list;
PageResult pageResult = new PageResult();
pageResult.setTotalSize(page.getTotal());
pageResult.setPageNum(page.getPageNum());
pageResult.setPageSize(page.getPageSize());
pageResult.setContent(page);
pageResult.setTotalPages(page.getPages());
return pageResult;
}
}
分页入参实体
@Data
public class PageDto {
private int pageNum;
private int pageSize;
}
mapper层
public interface TlrDocEleMdMtMapper extends BaseMapper<TlrDocEleMdMt> {
List<TlrDocEleMdMt> selectList1(PageDto dto);
List<TlrDocEleMdMt> selectList2(int pageNum,int pageSize);
List<TlrDocEleMdMt> selectList3(int pageSize);
}
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zyp.mapper.TlrDocEleMdMtMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.zyp.model.entity.TlrDocEleMdMt">
<id column="ID" property="id" />
<result column="CODE" property="code" />
<result column="NAME" property="name" />
<result column="MD_TYPE" property="mdType" />
<result column="CITY_NO" property="cityNo" />
<result column="ORG_NO" property="orgNo" />
<result column="POWER_SUPPLY_INSTITUTE" property="powerSupplyInstitute" />
<result column="TEAM_NO" property="teamNo" />
<result column="VOL_LEVEL" property="volLevel" />
<result column="MODE" property="mode" />
<result column="VOL_WAY" property="volWay" />
<result column="WINDING_TYPE" property="windingType" />
<result column="CAP1" property="cap1" />
<result column="CAP2" property="cap2" />
<result column="CAP3" property="cap3" />
<result column="CT" property="ct" />
<result column="PT" property="pt" />
<result column="OWNER_SUB_ID" property="ownerSubId" />
<result column="OWNER_SUB_NAME" property="ownerSubName" />
<result column="OWNER_SUB_VOL_LEVEL" property="ownerSubVolLevel" />
<result column="ADDRESS" property="address" />
<result column="GPS_LON" property="gpsLon" />
<result column="GPS_LAT" property="gpsLat" />
<result column="RUN_DATE" property="runDate" />
<result column="OPEN_LOSS" property="openLoss" />
<result column="RATED_LOSS12" property="ratedLoss12" />
<result column="RATED_LOSS13" property="ratedLoss13" />
<result column="RATED_LOSS23" property="ratedLoss23" />
<result column="FULL_LOSS" property="fullLoss" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
ID, CODE, NAME, MD_TYPE, CITY_NO, ORG_NO, POWER_SUPPLY_INSTITUTE, TEAM_NO, VOL_LEVEL, MODE, VOL_WAY, WINDING_TYPE, CAP1, CAP2, CAP3, CT, PT, OWNER_SUB_ID, OWNER_SUB_NAME, OWNER_SUB_VOL_LEVEL, ADDRESS, GPS_LON, GPS_LAT, RUN_DATE, OPEN_LOSS, RATED_LOSS12, RATED_LOSS13, RATED_LOSS23, FULL_LOSS
</sql>
<select id="selectList1" resultType="com.zyp.model.entity.TlrDocEleMdMt">
select <include refid="Base_Column_List"/> from tlr_doc_ele_md_mt
</select>
<select id="selectList2" resultType="com.zyp.model.entity.TlrDocEleMdMt">
select <include refid="Base_Column_List"/> from tlr_doc_ele_md_mt order by ID
</select>
<select id="selectList3" resultType="com.zyp.model.entity.TlrDocEleMdMt">
select <include refid="Base_Column_List"/> from tlr_doc_ele_md_mt
</select>
</mapper>
serviceImpl类
@Service
public class TlrDocEleMdMtServiceImpl extends ServiceImpl<TlrDocEleMdMtMapper, TlrDocEleMdMt> implements TlrDocEleMdMtService {
@Autowired
private TlrDocEleMdMtMapper tlrDocEleMdMtMapper;
@Override
public PageResult getAll(PageDto dto) {
PageResult pageResult = new PageResult();
//有分页
List<TlrDocEleMdMt> tlrDocEleMdMts = tlrDocEleMdMtMapper.selectList1(dto);
//有分页
List<TlrDocEleMdMt> tlrDocEleMdMts1 = tlrDocEleMdMtMapper.selectList2(dto.getPageNum(),dto.getPageSize());
//没有分页
List<TlrDocEleMdMt>tlrDocEleMdMts3 = tlrDocEleMdMtMapper.selectList3(dto.getPageSize());
PageInfo<TlrDocEleMdMt> tlrDocEleMdMtPageInfo = new PageInfo<>(tlrDocEleMdMts);
pageResult.setPageNum(tlrDocEleMdMtPageInfo.getPageNum());
pageResult.setPageSize(tlrDocEleMdMtPageInfo.getPageSize());
pageResult.setTotalSize(tlrDocEleMdMtPageInfo.getTotal());
pageResult.setTotalPages(tlrDocEleMdMtPageInfo.getPages());
pageResult.setContent(tlrDocEleMdMtPageInfo.getList());
return pageResult;
}
}
3.3.查询结果转成分页实体
方法1:
Page<TlrDocEleMdMt> page = (Page<TlrDocEleMdMt>) tlrDocEleMdMts;
pageResult.setPageNum(page.getPageNum());
pageResult.setPageSize(page.getPageSize());
pageResult.setTotalSize(page.getTotal());
pageResult.setTotalPages(page.getPages());
pageResult.setContent(page);
方法2:
PageInfo<TlrDocEleMdMt> tlrDocEleMdMtPageInfo = new PageInfo<>(tlrDocEleMdMts);
pageResult.setPageNum(tlrDocEleMdMtPageInfo.getPageNum());
pageResult.setPageSize(tlrDocEleMdMtPageInfo.getPageSize());
pageResult.setTotalSize(tlrDocEleMdMtPageInfo.getSize());
pageResult.setTotalPages(tlrDocEleMdMtPageInfo.getPages());
pageResult.setContent(tlrDocEleMdMtPageInfo.getList());
4.特殊处理
若查询接口返回的实体类与要求返回的类不一致,比如查询接口返回的 List < TlrDocEleMdMt > list,TlrDocEleMdMt类里面参数有些是不需要返回的,此时我们只使用它的分页信息(除了内容),新建一个类,具体如下:
新建的实体类
TlrResponseDto
@Data
public class TlrResponseDto {
@ApiModelProperty(value = "设备ID")
private String id;
@ApiModelProperty(value = "设备编码")
private String code;
@ApiModelProperty(value = "设备名称")
private String name;
}
具体处理:
PageResult pageResult = new PageResult();
PageHelper.startPage(1, 10);
List<TlrDocEleMdMt> list = tlrDocEleMdMtMapper.selectList(null);
Page<TlrDocEleMdMt> page = (Page<TlrDocEleMdMt>) list;
//把TlrDocEleMdMt转成TlrResponseDto
List<TlrResponseDto> list1 = Lists.newArrayList();
list.forEach(l->{
TlrResponseDto response=new TlrResponseDto();
response.setId(l.getId());
response.setCode(l.getCode());
response.setName(l.getName());
list1.add(response);
});
//封装分页信息
PageInfo<TlrDocEleMdMt> tlrDocEleMdMtPageInfo = new PageInfo<>(list);
pageResult.setPageNum(tlrDocEleMdMtPageInfo.getPageNum());
pageResult.setPageSize(tlrDocEleMdMtPageInfo.getPageSize());
pageResult.setTotalSize(tlrDocEleMdMtPageInfo.getSize());
pageResult.setTotalPages(tlrDocEleMdMtPageInfo.getPages());
pageResult.setContent(list1);