1. 程式人生 > >關於Class MyBatisPagingItemReader 讀取資料只讀第一條分頁資料就結束了問題

關於Class MyBatisPagingItemReader 讀取資料只讀第一條分頁資料就結束了問題

都是單條單表資料進行匯入使用的JdbcPagingItemReader<T>設定分頁引數,就可以分頁讀取。現在匯入資料需要維護層級關係,使用jdbc完全不可以滿足關係
進而選擇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>

相關推薦

關於Class MyBatisPagingItemReader 讀取資料只讀第一資料結束問題

都是單條單表資料進行匯入使用的JdbcPagingItemReader<T>設定分頁引數,就可以分頁讀取。現在匯入資料需要維護層級關係,使用jdbc完全不可以滿足關係 進而選擇MyBatisPagingItemReader<T>, 使用mabatis

記憶體?為什麼還要分段?還有段式?

你好,我是 yes。 關於記憶體訪問你可能聽過分段,分頁,還有段頁式。 但是為什麼要分段?又為什麼要分頁? 有了分頁為什麼還要分段? 這就需要看一看歷史的發展,知曉歷史之後就知道這一切其實都是自然而然的。 這些概念也不是硬塞出來的。 ## 正文 1971 年 11 月 15 日,Intel 推出

sql效能優化第一篇之資料與count資料一次性獲取

相信大部分人都會遇到:在資料庫的資料量很大時,分頁需要幾秒鐘才會全部完成;包括分頁list的獲取和count的獲取。那我們完全可以將這兩步放到一次sql去執行獲取,減少一半的查詢時間。這裡get到sql_calc_found_rows和SELECT FOUND_ROWS()這兩個知識點。看程式碼

重複資料第一

使用分析函式row_number() over (partiion by ... order by ...)來進行分組編號,然後取分組標號值為1的記錄即可。目前主流的資料庫都有支援分析函式,很好用。 其中,partition by 是指定按哪些欄位進行分組,這些欄位值相同的

php資料最後一繼續追加第一資料

之前做資料分頁遇到這樣一個需求,就是資料到最後一頁的時候不能中斷,繼續把第一頁的資料追加到後面,無限顯示下去。 原文地址:程式碼匯個人部落格 https://www.codehui.net/info/23.html 一般情況我們寫資料分頁都是如下程式碼 //分頁碼 $page = $_REQUE

jquery 滾動載入資料

廢話不多說  直接擼 1.引入兩個js檔案,必須jquery第一個 <script src="jquery.min.js"/> <script src="jquery.infinit

Mybatis攔截器之資料許可權過濾與整合

解決方案之改SQL 原sql SELECT a.id AS "id", a.NAME AS "name", a.sex_cd AS "sexCd", a.org_id AS "orgId", a.STATUS AS "status", a.create_org_id AS "createOrgId"

ZK 關於前臺頁面資料不會自動換行的問題

    由於Code太長而現實不全完整的Code,客戶讓既然提出要求當然我們要改了   剛開始我沒有考慮到頁面的縮放問題,我是這樣寫的   我把Code 字串進行了擷取,通過tabUtils來實現的程式碼如下 public

mysql limit 資料丟失問題測試

背景 前幾天看到有說mysql使用 limit 0,10 這種方式分頁會丟失資料,有人質疑說不會,動手驗證一下。 操作步驟 表結構如下: create table `test`.`t_model`( `id` bigint NOT NULL AUTO_INCREMEN

select2 下拉載入 資料

這篇博文 http://www.php.cn/js-tutorial-384637.html 註釋寫的比較詳細, (不過他做了很多修改) https://blog.csdn.net/bossxu_/article/details/80368471  這個也可以看看 首先,頁

資料庫用對映表取資料時怎麼排序

問題記錄: 面對資料庫多對多的問題,利用對映表取資料的排序問題; 在面對多對多的情況時,我們一般會利用對映表來處理資料,例如一個文章有多個標籤,一個標籤同時也對應多個文章,此時我們便要建立一個文章表,一個標籤表,一個對映表把他們關聯起來。 但是這樣的問題是,怎麼排序呢? 對映表

oracle查詢資料重複問題、排序陷阱

select * from (select rownum as rn, ab.* from (SELECT t.id, e.ehr_id, nh_code,

DRF中介面資料序列化及、過濾、搜尋、排序的快速實現

       在學習了一段時間DRF後,明顯感受到了在Web API搭建的過程中,DRF比Django靈活和迅速很多,DRF中提供了很多強大檢視和API,本篇通過一個商品頁的小案例記錄一下通過試用各種檢視及filter之後總結出的一套最簡化程式碼。 &

使用通用mapper按條件查詢資料(包含Example的使用)

1  步驟:   分頁 ,   新增條件,  返回page物件, 封裝為需要的物件   2  一般分頁資料需要三個引數: 總頁數, 總條數,  物件的集合,    因此可以建立一個通用類,封裝上面的三個引數,具體如下:&nb

SSM_CRUD新手練習(9)顯示資料

    我們已經做好了用來顯示資料的分頁模板,現在只需要將我們從後臺取出的資料填充好,顯示出來。    我們使用<c:forEach>標籤迴圈取出資料,所以需要先匯入JSTL標籤庫 <%@ taglib prefix="C" uri="htt

bootstarp table -- 資料顯示

在bootstarp table 中,進行資料分頁的顯示,在使用分頁的時候,bootStarp table 提供了兩種方式,在這裡我們介紹 客戶端(client)進行資料的分頁,希望大神能給我留言,指出這兩種方式的區別。 在上一篇bootstarp table的介紹中,我們已經實現了在前端頁面請

Oracle 資料重複的問題

oracle分頁採用三層巢狀+rownum分頁時,如果有order by,就會有一個小坑,一不留神就掉進去了。 前置條件:分頁尾本中存在order by 問題暴露:分頁時好時壞 問題本質:order by 在相同的資料下,排序具有不確定性 解決方法:最簡單的辦法,習慣性在order by後面加rown

mysql 同時返回查詢總數及資料

select * from auth_user SELECT FOUND_ROWS() //返回查詢記錄的總數 select sql_calc_found_rows col_name from table_name limit 5,3; select found_rows

資料載入(二)

實現點選載入更多評論的功能 1、為載入更多按鈕,繫結點選事件,在事件中,請求下一頁資料 2、點選載入更多按鈕,讓 pageIndex++,然後重新呼叫 this.getComments()方法重新獲取最新一頁的資料 3、為了防止 新資料 覆蓋老資料的情況,我們在 點選載入更多的時候,每當獲

Vue實現資料的增刪改

現在我們在做之前要明白一點:vue強大之處-----資料驅動和自動重新整理 現在我們要做一個這樣的作業,包含新增資料,刪除資料,編輯資料,對資料進行分頁,此功能沒有後臺,全是前臺做的: 第一步:新增資料  增加使用者時使用push和unshift方法都可以,前者是把