大家基于sql文或querywrapper进行单表分页查询的写法不是很陌生,但是多表分页查询呢?
多表联合查询后如何用IPage进行分页,以下小编给出来两种实现方式,一种是直接sql查询,查询条件为入参,另一种是querywrapper的当时进行。

第一种:
service类

public IPage<AaaRespDto> getInfoList(InfoDto reqDto){
	//分页索引
	Integer pageIndex = reqDto.getCurrent();
	//分页数量
	Integer pageSize = reqDto.getSize();
	//分页参数
	IPage<AaaRespDto> page = new Page<>();
	page.setCurrent(pageIndex);
	page.setSize(pageSize);
	//查询数据库
	page = getBaseMapper().getInfoListByPage(page,reqDto);
	return page;
}

mapper

IPage<AaaRespDto> getInfoListByPage(IPage<AaaRespDto> page,@Param("reqDto") InfoDto reqDto);

xml

<select id="getInfoListByPage" resultType="com.respdto.AaaRespDto">
	SELECT
	*
	FROM
	AA aa
	LEFT JOIN BB bb ON aa.ID = bb.RELEVANCE_ID
	WHERE
	aa.DELETE_FLAG = '1'
	AND bb.DELETE_FLAG = '1'
	<if test="reqDto.startTime != null and reqDto.startTime !=''">
		AND aa.PROJECT_TIME > #{reqDto.startTime}
	</if>
	<if test="reqDto.endTime != null and reqDto.endTime !=''">
		AND aa.PROJECT_TIME <![CDATA[<]]> #{reqDto.endTime}
	</if>
	<if test="reqDto.projectNo != null  and reqDto.projectNo !=''">
		AND aa.PROJECT_NO = #{reqDto.projectNo}
	</if>
	<if test="reqDto.user != null and reqDto.user != ''">
		AND ( aa.user_no  like CONCAT('%',#{reqDto.user},'%') or
		aa.user_name  like CONCAT('%',#{reqDto.user},'%') )
	</if>
	ORDER BY
	bb.CREATE_DATE DESC
</select>

第二种: querywrapper方式

service

public IPage<QueryRespDto> queryByPage(QueryReqDto dto) {
	//分页索引
	Integer pageIndex = dto.getCurrent();
	//分页数量
	Integer pageSize = dto.getSize();
	//分页参数
	IPage<QueryRespDto> page = new Page<>();
	page.setCurrent(pageIndex);
	page.setSize(pageSize);
	QueryWrapper<QueryRespDto> queryWrapper = new QueryWrapper<>();
	//订单编号
	queryWrapper.eq(StringUtils.isNotEmpty(dto.getCode()), "aa.code", dto.getCode());
	//公司
	queryWrapper.eq(StringUtils.isNotEmpty(dto.getCompanyCode()), "bb.company_code", dto.getCompanyCode());
	//分组
	queryWrapper.groupBy("aa.book_id");
	IPage<QueryRespDto> convert = getBaseMapper().pageBySql(page, queryWrapper);
	return convert;
}

mapper

IPage<QueryRespDto> pageBySql(IPage<QueryRespDto> page,@Param("ew") QueryWrapper<QueryRespDto> queryWrapper);

xml

<select id="pageBySql"
            resultType="com.respdto.QueryRespDto">
	SELECT
	aa.book_id AS bookId,
	bb.company_code AS companyCode,
	aa.code AS code,
	COALESCE(aa.price,0) AS price
	FROM
	AA aa
	LEFT JOIN BB bb ON aa.book_id = bb.book_id
	AND bb.delete_flag = '1'
	${ew.customSqlSegment}
</select>
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐