MybatisPlus连表查询分页问题

直接在mapper 接口内传入 Page 对象, 接口返回使用Page 对象接收就可以实现连表查询的分页
示例:

Page<EqmBaseInfoRespVO> selectByCntrNoOrTypeSizeOrCntrNos( @Param("page") Page<EqmBaseInfoDO> page,  @Param("req") EqmBaseInfoQueryReq req);
<select id="selectByCntrNoOrTypeSizeOrCntrNos"
            resultMap="baseInfoResp">

        select baseinfo.* ,es.cntr95,es.cntr_size,es.cntr_type,es.type_size
        from eqm_base_info baseinfo
                 left join eqm_container_certificate es
                           on baseinfo.deleted = es.deleted
        and baseinfo.certificate_no=es.certificate_no
        <where>
          <if test="req.typeSize!=null and req.typeSize!=''">
              and es.type_size=#{req.typeSize}
          </if>
        <if test="req.certificateNo!=null and req.certificateNo!=''">
             and es.certificate_no=#{certificateNo}
        </if>
        <if test="req.cntrNos!=null and req.cntrNos.size!=0">
                and baseinfo.cntr_no in
            <foreach collection="req.cntrNos" close=")" open="(" item="e" separator=",">
                #{e}
            </foreach>
        </if>
        </where>

    </select>
### MyBatisPlus 实现多联查分页查询 #### 使用内置分页插件与 `MPJLambdaWrapper` 为了实现复杂场景下的多联合查询并带有分页功能,可以利用 MyBatis-Plus 提供的强大工具集。对于较为简单的应用场景,MyBatis-Plus 自身携带的分页插件已经能够满足需求;然而,在面对涉及多个格之间关系的数据检索时,则可能需要借助额外的支持来完成更加精细的操作。 当涉及到跨操作时,`MPJLambdaWrapper` 成为了一种有效的解决方案[^2]。此条件构造器不仅继承了 LambdaQueryWrapper 的特性——允许开发者基于 lambda 达式构建查询语句,而且还特别增强了对多连接的支持能力。这意味着可以通过它轻松地指定不同之间的关联字段以及过滤条件等重要参数。 下面是一个具体的例子展示如何运用这些组件来进行一次完整的多联查加分页的过程: 假设存在两个实体类分别为 `User` 和 `Order`, 并且两者间存在着一对多的关系 (即一个用户拥有若干订单),现在目标是从数据库中获取特定颜色用户的全部订单信息,并按照一定顺序排列后返回给前端页面显示出来。 ```java // 定义 Mapper 接口 @Mapper public interface UserOrderMapper { IPage<Order> getUserOrders(Page<Order> page, String color); } ``` 接着是在 XML 文件里编写 SQL 语句部分: ```xml <select id="getUserOrders" resultType="com.example.Order"> SELECT o.* FROM orders AS o JOIN users AS u ON o.user_id = u.id WHERE u.color = #{color} ORDER BY o.create_time DESC LIMIT #{page.offset},#{page.size} </select> ``` 最后一步就是在 Service 层调用上述方法之前先配置好相应的分页设置: ```java @Service public class UserService { @Autowired private UserOrderMapper userOrderMapper; public void fetchUserOrders(int pageNum, int pageSize, String color) { Page<Order> page = new Page<>(pageNum, pageSize); // 执行查询 IPage<Order> orderPage = userOrderMapper.getUserOrders(page, color); // 进行业务逻辑处理... System.out.println(orderPage.getRecords()); } } ``` 以上就是使用 MyBatis-Plus 结合 MPJLambdaWrapper 来执行多联查的同时应用分页技术的一个简单实例说明。值得注意的是实际项目开发过程中还需要考虑诸如事务管理、异常捕获等问题以确保系统的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值