關於Class MyBatisPagingItemReader 讀取資料只讀第一條分頁資料就結束了問題
進而選擇MyBatisPagingItemReader<T>, 使用mabatis維持層級關係,問題來了:當我設定分頁引數為500的時候,返回的結果list是420,然後springBatch就沒有繼續往下讀取了?
解決辦法: 使用聯合查詢的時候,設定了分頁引數是500,必須保證返回結果是500.當少於了500 batch會判定為最後一頁,標記讀取結束,程式讀取就結束了
問題2:專案中會出現sql不報錯(如果sql報錯,會有日誌列印,debug模式),但是springBatch查不出結果?最坑爹的日誌也沒有報錯?
解決思路:這個原因很有可能是、resultMap中對應欄位和實體中的對應欄位不匹配。這個只能逐個檢查了。(這個小問題坑了我好幾個小時)
這個是修正後的xml 分頁查詢程式碼。必須保證left join 左邊是500條 (不重複)訂單記錄
<select id="selectOrderAndOrderLine" resultMap="CommonResultMap">
select
temp_a.*,
sol.id as line_id,
sol.so_id as line_so_id,
sol.item_meal_name as line_item_meal_name,
sol.pic_path as line_pic_path,
sol.seller_nick as line_seller_nick ,
sol.buyer_nick as line_buyer_nick ,
sol.refund_status as line_refund_status ,
sol.outer_iid as line_outer_iid ,
sol.snapshot_url as line_snapshot_url ,
sol.snapshot as line_snapshot ,
sol.timeout_action_time as line_timeout_action_time ,
sol.buyer_rate as line_buyer_rate ,
sol.seller_rate as line_seller_rate ,
sol.seller_type as line_seller_type ,
sol.cid as line_cid ,
sol.sub_order_tax_fee as line_sub_order_tax_fee ,
sol.sub_order_tax_rate as line_sub_order_tax_rate ,
sol.oid as line_oid ,
sol.status as line_status ,
sol.title as line_title ,
sol.type as line_type ,
sol.iid as line_iid ,
sol.price as line_price ,
sol.num_iid as line_num_iid ,
sol.item_meal_id as line_item_meal_id ,
sol.sku_id as line_sku_id ,
sol.num as line_num ,
sol.outer_sku_id as line_outer_sku_id ,
sol.order_from as line_order_from ,
sol.total_fee as line_total_fee ,
sol.payment as line_payment ,
sol.discount_fee as line_discount_fee ,
sol.adjust_fee as line_adjust_fee ,
sol.modified as line_modified ,
sol.sku_properties_name as line_sku_properties_name ,
sol.refund_id as line_refund_id ,
sol.is_oversold as line_is_oversold ,
sol.is_service_order as line_is_service_order ,
sol.end_time as line_end_time ,
sol.consign_time as line_consign_time ,
sol.order_attr as line_order_attr ,
sol.shipping_type as line_shipping_type ,
sol.bind_oid as line_bind_oid ,
sol.logistics_company as line_logistics_company ,
sol.invoice_no as line_invoice_no ,
sol.is_daixiao as line_is_daixiao ,
sol.divide_order_fee as line_divide_order_fee ,
sol.part_mjz_discount as line_part_mjz_discount ,
sol.ticket_outer_id as line_ticket_outer_id ,
sol.ticket_expdate_key as line_ticket_expdate_key ,
sol.store_code as line_store_code ,
sol.is_www as line_is_www ,
sol.tmser_spu_code as line_tmser_spu_code ,
sol.bind_oids as line_bind_oids ,
sol.zhengji_status as line_zhengji_status ,
sol.md_qualification as line_md_qualification ,
sol.md_fee as line_md_fee ,
sol.customization as line_customization ,
sol.inv_type as line_inv_type ,
sol.is_sh_ship as line_is_sh_ship ,
sol.shipper as line_shipper ,
sol.f_type as line_f_type ,
sol.f_status as line_f_status ,
sol.f_term as line_f_term ,
sol.assembly_rela as line_assembly_rela ,
sol.assembly_price as line_assembly_price ,
sol.assembly_item as line_assembly_item ,
sol.last_modified_time as line_last_modified_time ,
sol.create_time as line_create_time
from
(
SELECT so.* FROM t_tm_sales_order so
where so.last_modified_time >= to_timestamp('2015-05-05','yyyy-mm-dd hh24:mi:ss')
order by so.id limit #{_pagesize} OFFSET #{_skiprows}
) temp_a
inner join t_tm_sales_order_line sol on temp_a.id=sol.so_id
</select>
resultMap 如下
<resultMap id="BaseResultMap" type="cn.baozun.entity.ods.crm.TmSalesOrder">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="seller_nick" jdbcType="VARCHAR" property="sellerNick" />
<result column="pic_path" jdbcType="VARCHAR" property="picPath" />
<result column="payment" jdbcType="NUMERIC" property="payment" />
<result column="seller_rate" jdbcType="INTEGER" property="sellerRate" />
<result column="post_fee" jdbcType="NUMERIC" property="postFee" />
<result column="receiver_name" jdbcType="VARCHAR" property="receiverName" />
<result column="receiver_state" jdbcType="VARCHAR" property="receiverState" />
<result column="receiver_address" jdbcType="VARCHAR" property="receiverAddress" />
<result column="receiver_zip" jdbcType="VARCHAR" property="receiverZip" />
<result column="receiver_mobile" jdbcType="VARCHAR" property="receiverMobile" />
<result column="receiver_phone" jdbcType="VARCHAR" property="receiverPhone" />
<result column="consign_time" jdbcType="TIMESTAMP" property="consignTime" />
<result column="received_payment" jdbcType="NUMERIC" property="receivedPayment" />
<result column="est_con_time" jdbcType="TIMESTAMP" property="estConTime" />
<result column="invoice_kind" jdbcType="INTEGER" property="invoiceKind" />
<result column="receiver_country" jdbcType="VARCHAR" property="receiverCountry" />
<result column="receiver_town" jdbcType="VARCHAR" property="receiverTown" />
<result column="order_tax_fee" jdbcType="NUMERIC" property="orderTaxFee" />
<result column="paid_coupon_fee" jdbcType="NUMERIC" property="paidCouponFee" />
<result column="shop_pick" jdbcType="VARCHAR" property="shopPick" />
<result column="tid" jdbcType="BIGINT" property="tid" />
<result column="num" jdbcType="NUMERIC" property="num" />
<result column="num_iid" jdbcType="BIGINT" property="numIid" />
<result column="status" jdbcType="VARCHAR" property="status" />
<result column="title" jdbcType="VARCHAR" property="title" />
<result column="type" jdbcType="VARCHAR" property="type" />
<result column="price" jdbcType="NUMERIC" property="price" />
<result column="discount_fee" jdbcType="NUMERIC" property="discountFee" />
<result column="has_post_fee" jdbcType="INTEGER" property="hasPostFee" />
<result column="total_fee" jdbcType="NUMERIC" property="totalFee" />
<result column="created" jdbcType="TIMESTAMP" property="created" />
<result column="pay_time" jdbcType="TIMESTAMP" property="payTime" />
<result column="modified" jdbcType="TIMESTAMP" property="modified" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="buyer_message" jdbcType="VARCHAR" property="buyerMessage" />
<result column="buyer_memo" jdbcType="VARCHAR" property="buyerMemo" />
<result column="buyer_flag" jdbcType="BIGINT" property="buyerFlag" />
<result column="seller_memo" jdbcType="VARCHAR" property="sellerMemo" />
<result column="seller_flag" jdbcType="BIGINT" property="sellerFlag" />
<result column="invoice_name" jdbcType="VARCHAR" property="invoiceName" />
<result column="invoice_type" jdbcType="VARCHAR" property="invoiceType" />
<result column="buyer_nick" jdbcType="VARCHAR" property="buyerNick" />
<result column="trade_attr" jdbcType="VARCHAR" property="tradeAttr" />
<result column="credit_card_fee" jdbcType="NUMERIC" property="creditCardFee" />
<result column="step_trade_status" jdbcType="VARCHAR" property="stepTradeStatus" />
<result column="step_paid_fee" jdbcType="NUMERIC" property="stepPaidFee" />
<result column="mark_desc" jdbcType="VARCHAR" property="markDesc" />
<result column="shipping_type" jdbcType="VARCHAR" property="shippingType" />
<result column="buyer_cod_fee" jdbcType="NUMERIC" property="buyerCodFee" />
<result column="adjust_fee" jdbcType="NUMERIC" property="adjustFee" />
<result column="trade_from" jdbcType="VARCHAR" property="tradeFrom" />
<result column="buyer_rate" jdbcType="INTEGER" property="buyerRate" />
<result column="receiver_city" jdbcType="VARCHAR" property="receiverCity" />
<result column="receiver_district" jdbcType="VARCHAR" property="receiverDistrict" />
<result column="o2o" jdbcType="VARCHAR" property="o2o" />
<result column="o2o_guide_id" jdbcType="VARCHAR" property="o2oGuideId" />
<result column="o2o_shop_id" jdbcType="VARCHAR" property="o2oShopId" />
<result column="o2o_guide_name" jdbcType="VARCHAR" property="o2oGuideName" />
<result column="o2o_shop_name" jdbcType="VARCHAR" property="o2oShopName" />
<result column="o2o_delivery" jdbcType="VARCHAR" property="o2oDelivery" />
<result column="coupon_fee" jdbcType="NUMERIC" property="couponFee" />
<result column="o2o_et_order_id" jdbcType="VARCHAR" property="o2oEtOrderId" />
<result column="post_gate_declare" jdbcType="INTEGER" property="postGateDeclare" />
<result column="cross_bonded_declare" jdbcType="INTEGER" property="crossBondedDeclare" />
<result column="assembly" jdbcType="INTEGER" property="assembly" />
<result column="last_modified_time" jdbcType="TIMESTAMP" property="lastModifiedTime" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="rawdata_id" jdbcType="INTEGER" property="rawdataId" />
<result column="platform_id" jdbcType="VARCHAR" property="platformId" />
</resultMap>
<!-- orderlineMap 主要是order 表中的欄位和line表中的欄位有相同的,乾脆統一去別名 -->
<resultMap id="OrderlineMap" type="cn.baozun.entity.ods.crm.TmSalesOrderLine">
<result column="line_id" jdbcType="BIGINT" property="id" />
<result column="line_so_id" jdbcType="BIGINT" property="soId" />
<result column="line_item_meal_name" jdbcType="VARCHAR" property="itemMealName" />
<result column="line_pic_path" jdbcType="VARCHAR" property="picPath" />
<result column="line_seller_nick" jdbcType="VARCHAR" property="sellerNick" />
<result column="line_buyer_nick" jdbcType="VARCHAR" property="buyerNick" />
<result column="line_refund_status" jdbcType="VARCHAR" property="refundStatus" />
<result column="line_outer_iid" jdbcType="VARCHAR" property="outerIid" />
<result column="line_snapshot_url" jdbcType="VARCHAR" property="snapshotUrl" />
<result column="line_snapshot" jdbcType="VARCHAR" property="snapshot" />
<result column="line_timeout_action_time" jdbcType="TIMESTAMP" property="timeoutActionTime" />
<result column="line_buyer_rate" jdbcType="INTEGER" property="buyerRate" />
<result column="line_seller_rate" jdbcType="INTEGER" property="sellerRate" />
<result column="line_seller_type" jdbcType="VARCHAR" property="sellerType" />
<result column="line_cid" jdbcType="BIGINT" property="cid" />
<result column="line_sub_order_tax_fee" jdbcType="NUMERIC" property="subOrderTaxFee" />
<result column="line_sub_order_tax_rate" jdbcType="NUMERIC" property="subOrderTaxRate" />
<result column="line_oid" jdbcType="BIGINT" property="oid" />
<result column="line_status" jdbcType="VARCHAR" property="status" />
<result column="line_title" jdbcType="VARCHAR" property="title" />
<result column="line_type" jdbcType="VARCHAR" property="type" />
<result column="line_iid" jdbcType="VARCHAR" property="iid" />
<result column="line_price" jdbcType="VARCHAR" property="price" />
<result column="line_num_iid" jdbcType="BIGINT" property="numIid" />
<result column="line_item_meal_id" jdbcType="INTEGER" property="itemMealId" />
<result column="line_sku_id" jdbcType="BIGINT" property="skuId" />
<result column="line_num" jdbcType="INTEGER" property="num" />
<result column="line_outer_sku_id" jdbcType="VARCHAR" property="outerSkuId" />
<result column="line_order_from" jdbcType="VARCHAR" property="orderFrom" />
<result column="line_total_fee" jdbcType="NUMERIC" property="totalFee" />
<result column="line_payment" jdbcType="NUMERIC" property="payment" />
<result column="line_discount_fee" jdbcType="NUMERIC" property="discountFee" />
<result column="line_adjust_fee" jdbcType="NUMERIC" property="adjustFee" />
<result column="line_modified" jdbcType="TIMESTAMP" property="modified" />
<result column="line_sku_properties_name" jdbcType="VARCHAR" property="skuPropertiesName" />
<result column="line_refund_id" jdbcType="BIGINT" property="refundId" />
<result column="line_is_oversold" jdbcType="INTEGER" property="isOversold" />
<result column="line_is_service_order" jdbcType="INTEGER" property="isServiceOrder" />
<result column="line_end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="line_consign_time" jdbcType="TIMESTAMP" property="consignTime" />
<result column="line_order_attr" jdbcType="VARCHAR" property="orderAttr" />
<result column="line_shipping_type" jdbcType="VARCHAR" property="shippingType" />
<result column="line_bind_oid" jdbcType="BIGINT" property="bindOid" />
<result column="line_logistics_company" jdbcType="VARCHAR" property="logisticsCompany" />
<result column="line_invoice_no" jdbcType="VARCHAR" property="invoiceNo" />
<result column="line_is_daixiao" jdbcType="INTEGER" property="isDaixiao" />
<result column="line_divide_order_fee" jdbcType="NUMERIC" property="divideOrderFee" />
<result column="line_part_mjz_discount" jdbcType="NUMERIC" property="partMjzDiscount" />
<result column="line_ticket_outer_id" jdbcType="VARCHAR" property="ticketOuterId" />
<result column="line_ticket_expdate_key" jdbcType="VARCHAR" property="ticketExpdateKey" />
<result column="line_store_code" jdbcType="VARCHAR" property="storeCode" />
<result column="line_is_www" jdbcType="INTEGER" property="isWww" />
<result column="line_tmser_spu_code" jdbcType="VARCHAR" property="tmserSpuCode" />
<result column="line_bind_oids" jdbcType="VARCHAR" property="bindOids" />
<result column="line_zhengji_status" jdbcType="INTEGER" property="zhengjiStatus" />
<result column="line_md_qualification" jdbcType="VARCHAR" property="mdQualification" />
<result column="line_md_fee" jdbcType="NUMERIC" property="mdFee" />
<result column="line_customization" jdbcType="VARCHAR" property="customization" />
<result column="line_inv_type" jdbcType="VARCHAR" property="invType" />
<result column="line_is_sh_ship" jdbcType="INTEGER" property="isShShip" />
<result column="line_shipper" jdbcType="VARCHAR" property="shipper" />
<result column="line_f_type" jdbcType="VARCHAR" property="fType" />
<result column="line_f_status" jdbcType="VARCHAR" property="fStatus" />
<result column="line_f_term" jdbcType="VARCHAR" property="fTerm" />
<result column="line_assembly_rela" jdbcType="VARCHAR" property="assemblyRela" />
<result column="line_assembly_price" jdbcType="NUMERIC" property="assemblyPrice" />
<result column="line_assembly_item" jdbcType="VARCHAR" property="assemblyItem" />
<result column="line_last_modified_time" jdbcType="TIMESTAMP" property="lastModifiedTime" />
<result column="line_create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="line_platform_id" jdbcType="VARCHAR" property="platformId" />
</resultMap>
<!--為減少資料庫IO,使用一對多查詢出關聯資訊-->
<resultMap id="CommonResultMap" type="cn.baozun.entity.ods.crm.TmSalesOrder" extends="BaseResultMap" >
<collection property="orderLineList" resultMap="OrderlineMap" />
</resultMap>