MybatisPlus多表联查时分页如何操作?这几种方式的区别是什么?

在涉及到多表的时候就需要用到xml编写sql,这时候就需要额外的操作

1.使用Page插件

在service调用mapper传入Page

  @Override
    public Page<OATransferReviewResDTO> getAuditRecord(OATransferReviewReqDTO oaTransferReviewReqDTO) {
        Page<OATransferReviewResDTO> oaTransferReviewDTOS = oaTransferRequestMapper
                .selectByPage(
                        new Page<>(oaTransferReviewReqDTO.getCurrentPage(),oaTransferReviewReqDTO.getSize())
                        , oaTransferReviewReqDTO);
        return oaTransferReviewDTOS;
    }

new Page<>(oaTransferReviewReqDTO.getCurrentPage(),oaTransferReviewReqDTO.getSize()) 

mapper接收

  Page<OATransferReviewResDTO> selectByPage(@Param("page") Page objectPage, @Param("OA") OATransferReviewReqDTO ontansferReviewReqDTO);

 @Param("page")

xml也要注意

    <select id="selectByPage" parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page" resultType="com.hykj.pay.common.model.dto.oa.OATransferReviewResDTO">
        SELECT
        TYPE,TRANSFER_CHANNEL,ORG,AMOUNT,ACCOUNT,REVIEW_STATUS,REVIEWERS,REVIEW_REMARK,REFERENCE,CREATE_TIME,UPDATE_TIME
        FROM
        (
        SELECT TYPE,TRANSFER_CHANNEL,ORG,AMOUNT,1 AS
        ACCOUNT,REVIEW_STATUS,REVIEWERS,REVIEW_REMARK,REFERENCE,CREATE_TIME,UPDATE_TIME
        FROM oa_transfer_request
        <include refid="where1"/>
        UNION ALL
        SELECT TYPE,TRANSFER_CHANNEL,ORG,TOTAL_MONEY AS AMOUNT,COUNT AS
        ACCOUNT,REVIEW_STATUS,REVIEWERS,REVIEW_REMARK,REFERENCE,CREATE_TIME ,UPDATE_TIME
        FROM oa_transfer_import_record
        <include refid="where2"/>
        )
        AS a
        ORDER BY field(REVIEW_STATUS,'PENDING','APPROVAL','FAILURE') ,CREATE_TIME desc

    </select>

parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page" 

2.使用RowBounds

在调用mapper时传入new RowBounds((page-1)*size,size)

mapper接收

    Page<OATransferReviewResDTO> selectByPage(RowBounds rowBounds, @Param("OA") OATransferReviewReqDTO ontansferReviewReqDTO);
r

不需要额外的操作

3.PageHelper(需要引入依赖)

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.11</version>
</dependency>
// 开始分页,设置当前页码和每页的记录数
PageHelper.startPage(1, 10);

// 调用你的Mapper方法进行查询。这个方法将只返回第一页的数据
List<User> users = userMapper.selectByExample(example);

// 使用PageInfo包装查询结果,这样可以获取更多分页的相关信息,如总记录数、总页数等
PageInfo<User> pageInfo = new PageInfo<>(users);

4.区别

需要注意的是,性能差别很大,Page插件是将分页逻辑limit拼接到sql语句中,所以需要分页的sql结尾最好别加“ ;”

RowBounds是将合适的数据全查出来后,在内存中进行分页

使用PageHelper进行分页,首先需要在项目中引入PageHelper的依赖。然后,在执行查询之前,调用PageHelper.startPage(pageNum, pageSize)方法,其中pageNum表示页码,pageSize表示每页的记录数。

当调用startPage方法后,接下来的第一个Mybatis查询方法会被进行分页。具体来说,PageHelper会自动修改该查询的SQL语句,添加适当的LIMITOFFSET子句(或者其他数据库特定的分页语法),然后执行这个修改后的SQL语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值