在Mapper.xml中使用mybatisplus的QueryWrapper

本文介绍了在MybatisPlus中如何使用QueryWrapper批量查询,并结合XML自定义查询,利用customSqlSegment简化条件构建。重点展示了如何在查询时利用lambda表达式和Wrapper技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在xml中,要根据id批量查询,需要使用foreach循环collection,foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

在mybatisPlus中,简便的做法:可以将queryWrapper作为参数传递到Mapper中

第一步:构建QueryWrapper对象,实质上通过in已经构建出了查询符合id的条件语句

 QueryWrapper<OmsCartItem> queryWrapper = new QueryWrapper<>();
   queryWrapper.lambda().eq(OmsCartItem::getMemberId,currentMember.getId())
                .in(OmsCartItem::getId,paramDTO.getItemIds());
        // 根据购物车id查询所有购物车信息
List<CartItemStockDTO> cartItemStockByIds = cartItemMapper.getCartItemStockByIds(queryWrapper);

第二步:在自定义xml查询 结合mp的Wrapper 来使用:把wrapper作为参数传递,注意添加注解@Param(Constants.WRAPPER) Wrapper

    /**
     *  在自定义xml查询 结合mp的Wrapper 来使用
     * @param ew
     * @return
     */
    List<CartItemStockDTO> getCartItemStockByIds(@Param(Constants.WRAPPER) Wrapper ew);

第三步:通过${ew.customSqlSegment}可以获取mybatisPlus的条件构造器wrapper生成的条件语句,不需要动态拼接条件来筛选

<!--根据多个购物车id批量查询 , 在xml中使用QueryWrapper, 使用customSqlSegment就可以获取mp帮我们生产条件sql语句-->
    <select id="getCartItemStockByIds" resultMap="CarItemStockMap">
        SELECT
        *,(SELECT stock-lock_stock FROM pms_sku_stock s WHERE  s.id=c.product_sku_id) as stock
        FROM oms_cart_item c
        ${ew.customSqlSegment}
    </select>
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值