MybatisPlus分页+自定义mapper方法

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
/**
* 测试MybatisPlus的分页Page+自定义Mapper方法
*
* @author wanghongyu02
* @date 2024-08-09 14:52
*/
@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
/**
* 分页查询学生信息(MybatisPlus+自定义Mapper)
*
* @param student
* @param pageVo
* @return Page<Student>
* @author wanghongyu02
* @date 2024-08-09 15:36
*/
@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;
}

请求测试


MybatisPlus分页+自定义mapper方法
http://wahoyu.xyz/2024/08/09/IPageForCloudSea/
作者
Wahoyu
发布于
2024年8月9日
许可协议