Mybatis Plus 使用VO分頁查詢
現在想要分頁查詢數據庫, 將查詢出來的數據封裝到vo
, 如果在使用limit
, 將無法通過一次查詢獲取總數據條數, 但是mp封裝了
#VO
這里組合了course
, subject
, teacher
作為DO
的實體類, 也是sql
返回的resultType
package com.chz.eduservice.entity.vo;
import com.chz.utils.statuscode.CourseStatus;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* @Author: CHZ
* @DateTime: 2020/7/3 16:24
* @Description: TODO
*/
@ApiModel("課程發布信息封裝類,用於展示course和在course list中顯示")
@Data
public class CoursePublishInfoVo implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String title;
private String cover;
private Integer lessonNum;
private String subjectLevelOne;
private String subjectLevelTwo;
private String teacherName;
private String price;
private String viewCount;
private CourseStatus status;
}
#DAO
注意這里必須要有Page
做參數, 泛型為想要作為分頁查詢一條記錄的VO
/**
* 按條件分頁查詢course
*
* @param page 注意這里必須要有Page對象,否則mp無法完成分頁查詢
* @param courseQuery
* @return
*/
List<CoursePublishInfoVo> pageCourseAllInfo(Page<CoursePublishInfoVo> page,
@Param("courseQuery") CourseQuery courseQuery);
#sql
這里一定不能使用limit
<select id="pageCourseAllInfo" resultType="com.chz.eduservice.entity.vo.CoursePublishInfoVo">
SELECT ec.id, ec.title, ec.price, ec.status, ec.lesson_num AS lessonNum,ec.view_count AS viewCount,
et.name AS teacherName,
es1.title AS subjectLevelOne,
es2.title AS subjectLevelTwo
FROM edu_course ec
LEFT JOIN edu_course_description ecd ON ec.id = ecd.id
LEFT JOIN edu_teacher et ON ec.teacher_id = et.id
LEFT JOIN edu_subject es1 ON ec.subject_parent_id = es1.id
LEFT JOIN edu_subject es2 ON ec.subject_id = es2.id
<where>
<if test="courseQuery.title!=null">
AND ec.title = #{courseQuery.title}
</if>
<if test="courseQuery.teacherId!=null">
AND et.id = #{courseQuery.teacherId}
</if>
<if test="courseQuery.subjectParentId!=null">
AND ec.subject_parent_id = #{courseQuery.subjectParentId}
</if>
<if test="courseQuery.subjectId!=null">
AND ec.subject_id = #{courseQuery.subjectId}
</if>
<if test="courseQuery.status!=null">
AND ec.status = #{courseQuery.status}
</if>
<if test="courseQuery.beginPrice!=null and courseQuery.endPrice!=null">
AND ec.price BETWEEN courseQuery.beginPrice AND courseQuery.endPrice
</if>
</where>
ORDER BY ec.gmt_create DESC
</select>
#Service
@Override
public Page<CoursePublishInfoVo> pageCourseAllInfo(Integer cur, Integer size, CourseQuery courseQuery) {
Page<CoursePublishInfoVo> page = new Page<>(cur, size);
//將查詢結果封裝到page中,作為page中的數據
page.setRecords(baseMapper.pageCourseAllInfo(page, courseQuery));
return page;
}
#Controller
@ApiOperation(value = "分頁查詢")
@PostMapping("/{curPage}/{pageSize}")
public ResponseBo pageCourseOnCondition(@Min(1) @PathVariable Integer curPage,
@PathVariable Integer pageSize,
@RequestBody CourseQuery courseQuery) {
HashMap<String, Object> map = new HashMap<>();
Page<CoursePublishInfoVo> page = courseService.pageCourseAllInfo(curPage, pageSize, courseQuery);
map.put("courses",page.getRecords());
map.put("total",page.getTotal());
return ResponseBo.ok().data("info", map);
}