mysql多條件批量查詢,且數據量大分批查詢

一,查詢入參

@Data
public class ReqSupplierOrderCycleVO implements Serializable {

    @ApiModelProperty("供應商編碼")
    private String supplierCode;

    @ApiModelProperty("地點編碼")
    private String locationCode;

    @ApiModelProperty("大類編碼")
    private String bigCategoryCode;
}

二,分批處理

service接口及對參數分批查詢200條,查詢一次

R<List<ResSupplierOrderCycleVO>> getListParameterOrderCycleByVOs(List<ReqSupplierOrderCycleVO> vos);
分批
List<List<ParameterOrderCycleDto>> batches = Lists.partition(queryDtos, BizConstant.PROD_BATCH_SIZE);
List<ParameterOrderCycle> queryResult = parameterOrderCycleMapper.selectListParameterOrderCycle(batches);

mapper接口

List<ParameterOrderCycle> selectListParameterOrderCycle(@Param("dtos") List<List<ParameterOrderCycleDto>> dtos);

mapper實現

 <select id="selectListParameterOrderCycle" parameterType="java.util.List" resultMap="BaseResultMap">
    <foreach item="item" index="index" collection="dtos" separator="UNION ALL">
      (select
      <include refid="Base_Column_List"/>
      from parameter_order_cycle
      <where>
        (location_code, supplier_code, big_category_code) IN
        <foreach item="vo" index="index" collection="item" open="(" separator="," close=")">
          (#{vo.locationCode,jdbcType=VARCHAR}, #{vo.supplierCode,jdbcType=VARCHAR}, #{vo.bigCategoryCode,jdbcType=VARCHAR})
        </foreach>
        and submit_status = 1
      </where>)
    </foreach>
  </select>

三,批量不分批實現

方式1

mapper實現

 (select
      <include refid="Base_Column_List"/>
      from parameter_order_cycle
      <where>
        (location_code, supplier_code, big_category_code) IN
        <foreach item="vo" index="index" collection="item" open="(" separator="," close=")">
          (#{vo.locationCode,jdbcType=VARCHAR}, #{vo.supplierCode,jdbcType=VARCHAR}, #{vo.bigCategoryCode,jdbcType=VARCHAR})
        </foreach>
        and submit_status = 1
      </where>)

sql打印

select
     *
    from
        parameter_order_cycle 
    WHERE
        (
            location_code, supplier_code, big_category_code
        ) IN (
            (
                'W001', '200174', ''
            ) , (
                'W001', '200291', ''
            ) , (
                'W001', '200174', '1237'
            ) , (
                'W001', '200291', '1230'
            ) 
        ) 
        and submit_status = 1 
)

方式2

List<ParameterProductShopSpace> selectByProductAndShopCode(@Param("condition") Collection<ParameterProductShopSpace> condition);

mapper實現

  <select id="selectByProductAndShopCode" resultType="com.yonghui.yh.rme.srm.ordercenter.dao.entity.ParameterProductShopSpace">
        SELECT * FROM
        parameter_product_shop_space
        <where>
        <foreach collection="condition" separator="or" item="item">
            (shop_code = #{item.shopCode} and product_code= #{item.productCode})
        </foreach>
        </where>
    </select>

sql打印

 SELECT
        * 
    FROM
        parameter_product_shop_space 
    WHERE
        (
            shop_code = '9010' 
            and product_code= '7'
        ) 
        or (
            shop_code = '9010' 
            a

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章