springcloud +mybatisplus实现分页功能
1.采用pagehelper方法
这种方法自己在网上找了很多资料,但是没用使用成功。或许是版本冲突的原因,这里我重点记录下第二种方法,使用mybatisplus内置的分页方法
2.mybatisplus内置的分页方法
不需要导入第三方jar包,在mybatisplus的基础上 添加一个拦截器 ,实现类在调用mapper是多传一个Page 参数即可。
2.1 拦截器
package com.dfjg.tiku.tikubnczhomeworkassignment.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求
// 默认false 为false时 会返回空数据
paginationInterceptor.setOverflow(true);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
2.2
实现类代码
@Override
public ResultJson getHomeworkss(BnczHomework bnczHomework1,Integer pageCurrent,Integer pageSize) {
Page<BnczHomework> objectPage = new Page<>(pageCurrent, pageSize); //分页
HashMap<Object, Object> map = new HashMap<>();
Page<BnczHomework> BnczHomeworks = bnczHomeworkMapper.selectByTeancherId(objectPage,bnczHomework1); //加page参数
List<BnczHomework> records = BnczHomeworks.getRecords();
if (records.size() > 0) {
for (BnczHomework bnczHomework : records) {
bnczHomework.setId(bnczHomework.getId());
// 作业名称
bnczHomework.setHomeworkName(bnczHomework.getHomeworkName());
// 作业来源
bnczHomework.setBookName(bnczResourceFolderMapper.getBooknameByfolderId(bnczHomework.getFolderId()));
// 学科
bnczHomework.setSubject(bnczParameterMapper.getSubjectName(bnczHomework.getSubjectId()));
// 布置类型
if (bnczHomework.getAssignType() == 0) {
bnczHomework.setAssignmentType("整份布置");
} else {
bnczHomework.setAssignmentType("选题布置");
}
// 提交状态 0
Integer notSubmitted = bnczStudentHomeworkMapper.selectStudent(bnczHomework.getId(), 0);
// 提交状态 1
Integer Submitt = bnczStudentHomeworkMapper.selectStudent(bnczHomework.getId(), 1);
bnczHomework.setSubmitType(notSubmitted + "人未提交/" + Submitt + "人提交");
bnczHomework.setUnsubmitNumber(notSubmitted);
bnczHomework.setSubmitNumber(Submitt);
// 批改状态 0
Integer notCorrect = bnczStudentHomeworkMapper.selectStudentStatus(bnczHomework.getId(), 0);
// 批改状态 1
Integer correct = bnczStudentHomeworkMapper.selectStudentStatus(bnczHomework.getId(), 1);
bnczHomework.setStutas(notCorrect + "人未批改/" + correct + "人批改");
bnczHomework.setUncorrectNumber(notCorrect);
bnczHomework.setCorrectNumber(correct);
bnczHomework.setCreatTime(bnczHomework.getCreateTime());
// 作业开始时间
bnczHomework.setBeginTime(bnczHomework.getBeginTime());
// 作业结束时间
bnczHomework.setEndTime(bnczHomework.getEndTime());
};
// 学科
List<Long> subjectIds = new ArrayList<>();
List<Map> subjectIdsM = new ArrayList<>();
//班级
List<Long> classIdss = new ArrayList<>();
List<Map> classIdssM = new ArrayList<>();
List<BnczHomework> bnczHomeworkss= bnczHomeworkMapper.selectByTId(bnczHomework1.getHomeworkAssignTeacher());
for (BnczHomework homeworkss : bnczHomeworkss) {
// 班级
List<String> classIds = new ArrayList<>(Arrays.asList(homeworkss.getClassId().split(",")));
for (String classId : classIds) {
classId = classId.trim();
if (!classIdss.contains(Long.valueOf(classId))){
Map<Object, Object> classIdssMap = new HashMap<>();
classIdss.add(Long.valueOf(classId));
classIdssMap.put("classId",Long.valueOf(classId));
classIdssMap.put("className",bnczVirtualClassMapper.selectByid(Long.valueOf(classId)).getClassName());
classIdssM.add(classIdssMap);
}
// 学科
if (!subjectIds.contains(homeworkss.getSubjectId())){
subjectIds.add(homeworkss.getSubjectId());
Map<Object, Object> subjectMap = new HashMap<>();
subjectMap.put("subjectId",homeworkss.getSubjectId());
subjectMap.put("subjectName",bnczParameterMapper.getSubjectName(homeworkss.getSubjectId()));
subjectIdsM.add(subjectMap);
}
}
}
map.put("BnczHomeworks", BnczHomeworks);
map.put("subjects", subjectIdsM);
map.put("classes", classIdssM);
return new ResultJson(200,"查询作业成功",map);
} else {
map.put("code", 204);
map.put("message", "未查询到作业");
return new ResultJson(204,"未查询到作业",null);
}
}
mapper 代码
Page<BnczHomework> selectByTeancherId(Page objectPage, @Param("bnczHomework1") BnczHomework bnczHomework1);
xml
xml中正常书写你的sql代码 ,返回值会给你自动封装到Page中的List records
代码
SELECT
`id`,
`homework_name`,
`homework_assign_teacher`,
`class_id`,
`school_id`,
`student_count`,
`type`,
`assign_type`,
`begin_time`,
`end_time`,
`is_hide`,
`homework_status`,
`homework_finish_time`,
`correct_mode`,
`is_time_length`,
`is_show_answer`,
`subject_id`,
`folder_id`,
`root_folder_id`,
`create_time`,
`modify_time`,
`is_delete`
FROM
`bncz_homework`
WHERE
is_delete = 0
AND
homework_assign_teacher = #{bnczHomework1.homeworkAssignTeacher}
<if test="bnczHomework1.subjectId!=null">
and subject_id=#{bnczHomework1.subjectId}
</if>
<if test="bnczHomework1.classId!=null">
and FIND_IN_SET(#{bnczHomework1.classId},class_id)
</if>
<if test="bnczHomework1.assignType!=null">
and assign_type=#{bnczHomework1.assignType}
</if>
<if test="bnczHomework1.beginTime!=null">
and begin_time=#{bnczHomework1.beginTime}
</if>
<if test="bnczHomework1.homeworkName!=null">
and homework_name like CONCAT('%',#{bnczHomework1.homeworkName},'%')
</if>
ORDER BY create_time DESC
</select>
此处的 1为当前页,4为每页的条数。
Page为mybatisplus下的类,对返回的结果进行封装,包括当前页的数据,total,当前页码,总页数 等等
返回数据
{
"code": 200,
"message": "查询作业成功",
"data": {
"BnczHomeworks": {
"records": [
{
"studentHomeworkId": null,
"submitNumber": 0,
"unsubmitNumber": 60,
"correctNumber": 0,
"uncorrectNumber": 60,
"subject": "数学",
"assignmentType": "整份布置",
"submitType": "60人未提交/0人提交",
"stutas": "60人未批改/0人批改",
"creatTime": "2020-08-11 14:47:17",
"id": 393,
"homeworkName": "1.1 集合的概念及表示",
"homeworkAssignTeacher": 2,
"classId": "1,2",
"schoolId": null,
"studentCount": 60,
"type": null,
"assignType": 0,
"beginTime": "2020-08-11 00:00:00",
"endTime": "2020-08-12 00:00:00",
"isHide": null,
"homeworkStatus": null,
"homeworkFinishTime": null,
"correctMode": null,
"isTimeLimit": null,
"isTimeLength": null,
"isShowAnswer": 1,
"subjectId": 24,
"folderId": 6,
"rootFolderId": "21-ZJ-05-02-1-3-00-01",
"createTime": "2020-08-11 14:47:17",
"modifyTime": "2020-08-11 14:47:17",
"isDelete": 0,
"pageCurrent": null,
"pageSize": null,
"assignTerminal": null,
"bookName": "《2021 浙江 高职考 数学 知识梳理课时作业》",
"countdown": null
},
{
"studentHomeworkId": null,
"submitNumber": 0,
"unsubmitNumber": 30,
"correctNumber": 0,
"uncorrectNumber": 30,
"subject": "数学",
"assignmentType": "整份布置",
"submitType": "30人未提交/0人提交",
"stutas": "30人未批改/0人批改",
"creatTime": "2020-08-11 14:43:44",
"id": 392,
"homeworkName": "1.1 集合的概念及表示",
"homeworkAssignTeacher": 2,
"classId": "1",
"schoolId": null,
"studentCount": 30,
"type": null,
"assignType": 0,
"beginTime": "2020-08-12 00:00:00",
"endTime": "2020-08-19 00:00:00",
"isHide": null,
"homeworkStatus": null,
"homeworkFinishTime": null,
"correctMode": null,
"isTimeLimit": null,
"isTimeLength": null,
"isShowAnswer": 1,
"subjectId": 24,
"folderId": 6,
"rootFolderId": "21-ZJ-05-02-1-3-00-01",
"createTime": "2020-08-11 14:43:44",
"modifyTime": "2020-08-11 14:43:44",
"isDelete": 0,
"pageCurrent": null,
"pageSize": null,
"assignTerminal": null,
"bookName": "《2021 浙江 高职考 数学 知识梳理课时作业》",
"countdown": null
},
{
"studentHomeworkId": null,
"submitNumber": 0,
"unsubmitNumber": 60,
"correctNumber": 0,
"uncorrectNumber": 60,
"subject": "数学",
"assignmentType": "整份布置",
"submitType": "60人未提交/0人提交",
"stutas": "60人未批改/0人批改",
"creatTime": "2020-08-11 14:42:45",
"id": 391,
"homeworkName": "1.1 集合的概念及表示",
"homeworkAssignTeacher": 2,
"classId": "1, 2",
"schoolId": null,
"studentCount": 60,
"type": null,
"assignType": 0,
"beginTime": "2020-08-10 00:00:00",
"endTime": "2020-08-12 00:00:00",
"isHide": null,
"homeworkStatus": null,
"homeworkFinishTime": null,
"correctMode": null,
"isTimeLimit": null,
"isTimeLength": null,
"isShowAnswer": 1,
"subjectId": 24,
"folderId": 6,
"rootFolderId": "21-ZJ-05-02-1-3-00-01",
"createTime": "2020-08-11 14:42:45",
"modifyTime": "2020-08-11 14:42:45",
"isDelete": 0,
"pageCurrent": null,
"pageSize": null,
"assignTerminal": null,
"bookName": "《2021 浙江 高职考 数学 知识梳理课时作业》",
"countdown": null
},
{
"studentHomeworkId": null,
"submitNumber": 0,
"unsubmitNumber": 60,
"correctNumber": 0,
"uncorrectNumber": 60,
"subject": "数学",
"assignmentType": "整份布置",
"submitType": "60人未提交/0人提交",
"stutas": "60人未批改/0人批改",
"creatTime": "2020-08-11 14:41:02",
"id": 390,
"homeworkName": "1.1 集合的概念及表示",
"homeworkAssignTeacher": 2,
"classId": "1,2",
"schoolId": null,
"studentCount": 60,
"type": null,
"assignType": 0,
"beginTime": "2020-08-03 00:00:00",
"endTime": "2020-08-12 00:00:00",
"isHide": null,
"homeworkStatus": null,
"homeworkFinishTime": null,
"correctMode": null,
"isTimeLimit": null,
"isTimeLength": null,
"isShowAnswer": 1,
"subjectId": 24,
"folderId": 6,
"rootFolderId": "21-ZJ-05-02-1-3-00-01",
"createTime": "2020-08-11 14:41:02",
"modifyTime": "2020-08-11 14:41:02",
"isDelete": 0,
"pageCurrent": null,
"pageSize": null,
"assignTerminal": null,
"bookName": "《2021 浙江 高职考 数学 知识梳理课时作业》",
"countdown": null
}
],
"total": 7, //总条数
"size": 4, //每一页的size
"current": 1, //当前页
"orders": [],
"searchCount": true,
"pages": 2 //总页数
},
"subjects": [
{
"subjectId": 24,
"subjectName": "数学"
}
],
"classes": [
{
"classId": 1,
"className": "101班"
},
{
"classId": 2,
"className": "102班"
}
]
}
}
参考链接
吃水不忘挖井人,感谢大佬。
菜鸟记录,继续努力。
分割线-----------------------------------------------------------------
Pagehelp
1.导入jar包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.9</version>
</dependency>
2.实现类crud前加入
PageHelper.startPage(pageNum,pageSize);
3.将查询的结果放入PageInfo中
PageInfo<User> pageInfo = new PageInfo<>(users)
4.关于PageInfo
Pagehelp 的PageInfo 和 mybatisplus的Page的道理一样,都是对返回的数据进行封装
5.注意点:
pagehelp只对PageHelper.startPage(pageNum,pageSize)的第一条查询有效