pc端
后端给前端传递:total总数据数量
前端给后端传递:pageNum当前页码,pageSize每页数量
方法一:sql中limit设置分页
Controller
@PostMapping("/selectByPage")
public R<SchoolGrade> selectByPage(@RequestBody SchoolGrade schoolGrade) {
return schoolGradeService.selectByPage(schoolGrade);
}
serviceImpl
@Override
public R selectByPage(SchoolGrade schoolGrade) {
schoolGradeMapper.selectByPage(schoolGrade.getStart(), schoolGrade.getPageSize());
// 总条数
int total = schoolGradeMapper.selectTotal(schoolGrade);
return R.ok(total);
}
mapper
List<SchoolGrade> selectByPage(@Param("start") int start,
@Param("pageSize") int pageSize);
返回总条数
int selectTotal(SchoolGrade schoolGrade);
mapper.xml
<select id="selectByPage" resultType="com.dikar.yxb.admin.api.entity.SchoolGrade">
SELECT id,
grade_name,
grade_year,
start_date,
end_date
FROM school_grade
ORDER BY grade_name ASC
LIMIT #{start}, #{pageSize}
</select>
<select id="selectTotal" resultType="java.lang.Integer">
SELECT count(1)
FROM school_grade
</select>
实体
(直接看最下面 把页数,总条数等加入到实体中)
@Data
public class SchoolGrade implements Serializable {
private static final long serialVersionUID = -691405316488486520L;
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 学年
*/
private Integer gradeYear;
/**
* 年级名称
*/
private String gradeName;
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 修改人
*/
private String updateBy;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 删除标识 0正常 1已删除
*/
private String delFlag;
/**
* 第几页
*/
private int pageNum;
/**
* 每页几行数据
*/
private int pageSize;
/**
* 第几行开始
*/
private int start;
/**
* 计算从第几行开始
* 无论是limit、还是fetch 都是从某一行数据开始,向后取 pageSize 条数据
*/
public int getStart() {
if (pageNum <= 0) {
return 0;
}
return (pageNum - 1) * pageSize;
}
/**
* 总条数
*/
private int total;
}
方法二:PageHelper分页插件
pom.xml (引入插件依赖)
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
Controller
@PostMapping("/queryPage")
public R<PageInfo<SchoolGrade>> queryPage(@RequestBody SchoolGrade schoolGrade) {
return schoolGradeService.queryPage(schoolGrade);
}
ServiceImpl
@Override
public R<PageInfo<SchoolGrade>> queryPage(SchoolGrade schoolGrade) {
// 告诉PageHelper数据要从第几页,每页多少条数据
// 注:一定要在select查询语句之前使用该方法,否则无效
PageHelper.startPage(schoolGrade.getPageNum(), schoolGrade.getPageSize());
List<SchoolGrade> list = schoolGradeMapper.queryPage(schoolGrade);
PageInfo<SchoolGrade> schoolGradePageInfo = new PageInfo<>(list);
return R.ok(schoolGradePageInfo);
}
mapper
List<SchoolGrade> queryPage(SchoolGrade schoolGrade);
mapper.xml
<select id="queryPage" resultType="com.dikar.yxb.admin.api.entity.SchoolGrade">
SELECT id,
grade_name,
grade_year,
start_date,
end_date
FROM school_grade
ORDER BY grade_name ASC
</select>
移动端(流式分页)
后端传递给前端总条数
前端传递给后端 当前年级(根据你的排序字段),每页条数
Controller
@PostMapping("/pageQuery")
public R<SchoolGrade> pageQuery(@RequestBody SchoolGrade schoolGrade) {
return schoolGradeService.pageQuery(schoolGrade);
}
ServiceImpl
@Override
public R<SchoolGrade> pageQuery(SchoolGrade schoolGrade) {
schoolGradeMapper.pageQuery(schoolGrade);
return R.ok();
}
mapper
List<SchoolGrade> pageQuery(SchoolGrade schoolGrade);
mapper.xml
<select id="pageQuery" resultType="com.dikar.yxb.admin.api.entity.SchoolGrade">
SELECT id,
grade_name,
grade_year,
start_date,
end_date
FROM school_grade
where grade_name > #{gradeName}
ORDER BY grade_name ASC
LIMIT #{pageSize}
</select>