MybatisPlus分页查询使用自定义的Mapper方法,并将结果进行转换
云海中的默认使用的分页方式是PageHelper,原理是通过AOP拦截下面的第一个查询,方便但是不好自定义。有的时候可能会出现要做一点前置查询的情景,这种时候有一种办法是在Service中对应的方法转化为PageHelper.startPage。但是还是有一种没兜住底的感觉,现在开始看一下怎么使用MybatisPlus的分页查询+自定义Mapper方法查询,最后还能转化为云海的实体类返回的情景。
MybatisPlus分页方式
MybatisPlus分页可以通过下面几种方式实现:https://blog.csdn.net/qq_19419233/article/details/96868045
selectPage+Page对象实现
不详细说了,就是new LambdaQueryWrapper<Student>();
自定义mapper方法实现分页
Controller,这里的Student加了@RequestBody注解,说明这个student相关的属性是放在请求体Body里面的,PageVo没加这个注解,说明是在Param里面携带的参数。
1 2 3 4 5 6 7 8 9 10
|
@PostMapping("/testStudentPage") public AjaxResult testStudentPage(@RequestBody Student student, PageVo pageVo) { return AjaxResult.success(studentService.testStudentPage(student,pageVo)); }
|
Service,注意返回值是IPage,不是Page了
1
| IPage<Student> testStudentPage(Student student, PageVo pageVo);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
@Override public IPage<Student> testStudentPage(Student student, PageVo pageVo) { student.setDeleteFlag(Consts.DELETE_FLAG.IN_USE); return studentMapper.testStudentPage(student, new Page<>(pageVo.getPageNum(), pageVo.getPageSize())); }
|
Mapper.java,注意有多个参数要小心添加@Param注解区分,然后xml里面需要用student.属性
1
| IPage<Student> testStudentPage(@Param("student")Student student, @Param("page")Page<Student> page);
|
Mapper.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <?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.example.normal.mapper.StudentMapper">
<sql id="selectVo"> select id, `name`, age, student_class, phone, create_time, update_time, delete_time, create_by, update_by, delete_by, delete_flag, remark from student stu </sql>
<select id="testStudentPage" resultType="com.example.normal.entity.Student"> <include refid="selectVo"/> <where> <if test="student.name != null and student.name != ''">and `name` = #{student.name}</if> <if test="student.age != null">and age = #{student.age}</if> <if test="student.studentClass != null and student.studentClass != ''">and student_class = #{student.studentClass}</if> <if test="student.phone != null and student.phone != ''">and phone = #{student.phone}</if> <if test="student.createTime != null">and create_time = #{student.createTime}</if> <if test="student.updateTime != null">and update_time = #{student.updateTime}</if> <if test="student.deleteTime != null">and delete_time = #{student.deleteTime}</if> <if test="student.createBy != null and student.createBy != ''">and create_by = #{student.createBy}</if> <if test="student.updateBy != null and student.updateBy != ''">and update_by = #{student.updateBy}</if> <if test="student.deleteBy != null and student.deleteBy != ''">and delete_by = #{student.deleteBy}</if> <if test="student.deleteFlag != null">and delete_flag = #{student.deleteFlag}</if> <if test="student.remark != null and student.remark != ''">and remark = #{student.remark}</if> </where> </select>
</mapper>
|
MyBatisPlus的IPage转化为云海的TableDataInfo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| protected TableDataInfo getDataTable(List<?> list) { TableDataInfo rspData = new TableDataInfo(); rspData.setCode(200); if (list != null && !((List)list).isEmpty()) { rspData.setRows((List)list); rspData.setMsg("查询成功"); } else { list = new ArrayList(); rspData.setRows((List)list); rspData.setMsg("查询成功,数据记录为空"); }
rspData.setTotal((new PageInfo((List)list)).getTotal()); return rspData; }
|
请求测试

