mybatis-plus 分页- 联合查询

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="com.xxx.PermissionDoctorVo">
     <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="com.xxx.SysRole"
         resultMap="permissionDoctorRole">
    正常的联合查询语句, 额外的字段通过别名和上面的映射对应
 select>

mapper

注意: 入参Page对象不可少, mybatis-plus根据这个进行分页逻辑的组装

List<PermissionDoctorVo> pagePermissionDoctor(Page page, @Param("hmoId") String hmoId, @Param("resourceId") String resourceId);

实现方法

  1. 查询后通过page.setRecords()方法将查询结果封装到分页对象中
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)));

}

总结

  1. 定义返回对象
  2. 编写xml映射和查询方法
  3. mapper入参加上page对象(设置好分页参数)
  4. 将查询结果组装到page

你可能感兴趣的:(java,MySQL)