在Mapper.xml中使用mybatisplus的QueryWrapper

在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>

你可能感兴趣的:(mybatis整理,xml,java,开发语言)