基于mybatisplus的baomidou实现mysql数据库多表联合查询的分页写法
多表联合查询后如何用IPage进行分页,以下小编给出来两种实现方式,一种是直接sql查询,查询条件为入参,另一种是querywrapper的当时进行。大家基于sql文或querywrapper进行单表分页查询的写法不是很陌生,但是多表分页查询呢?第二种: querywrapper方式。
·
大家基于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>
更多推荐
已为社区贡献1条内容
所有评论(0)