mybatis-plus 分页- 联合查询
- 场景
- 实现方式
- 实体
- xml映射
- mapper
- 实现方法
- 总结
场景
业务需要关联多个表查询, 并且返回内容不只是一个表(还需要另外一个表的部分字段), 并且需要实现分页逻辑
本来看了下mybatis封装的查询方式, 没看到怎么进行多表联合, 想着手写实现联合查询并分页, 后面经过同事提醒发现有更加优雅的方式
实现方式
在调用mapper的时候传入一个page
对象, mybatis-plus
根据这个自动进行分页逻辑处理
实体
新建一个vo, 集成原本的数据库实体, 并填上需要新增加的字段
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PermissionVo extends SysRole {
/** 是否有权限 */
private int permission;
}
xml映射
<resultMap id="permissionDoctorRole" type="">
<id column="id" property="id" />
<result column="permission" property="permission" />
<result column="create_user" property="createUser" />
<result column="create_time" property="createTime" />
<result column="modify_user" property="modifyUser" />
<result column="modify_time" property="modifyTime" />
</resultMap>
<select id="pagePermissionDoctor" parameterType=""
resultMap="permissionDoctorRole">
正常的联合查询语句, 额外的字段通过别名和上面的映射对应
</select>
mapper
注意: 入参
Page
对象不可少,mybatis-plus
根据这个进行分页逻辑的组装
List<PermissionDoctorVo> pagePermissionDoctor(Page page, @Param("hmoId") String hmoId, @Param("resourceId") String resourceId);
实现方法
- 查询后通过
()
方法将查询结果封装到分页对象中
public PageSupport<PermissionDoctorVo> pagePermissionDoctorInHmo(String hmoId, Long pageNo, Long pageSize) {
String resouceId = CommonData.getStrParam("permission_manbingguanli");
Page<PermissionDoctorVo> page = new Page(1l, 10l);
if (isPresent(pageNo) && isPresent(pageSize)) {
page = new Page(pageNo, pageSize);
}
return new PageSupport<PermissionDoctorVo>(page.setRecords(baseMapper.pagePermissionDoctor(page, hmoId, resouceId)));
}
总结
- 定义返回对象
- 编写
xml
映射和查询方法 - 在
mapper
入参加上page
对象(设置好分页参数) - 将查询结果组装到
page
中