在公司ERP項目開發中,遇到批量數據插入或者更新,因為每次連接資料庫比較耗時,所以決定改為批量操作,提升效率。庫存檔點導入時,需要大量數據批量操作。 1:資料庫連接代碼中必須開啟批量操作。加上這句,&allowMultiQueries=true,完整的如下: jdbc:mysql://localho ...
在公司ERP項目開發中,遇到批量數據插入或者更新,因為每次連接資料庫比較耗時,所以決定改為批量操作,提升效率。庫存檔點導入時,需要大量數據批量操作。
1:資料庫連接代碼中必須開啟批量操作。加上這句,&allowMultiQueries=true,完整的如下:
jdbc:mysql://localhost:3306/jeesite2016?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
2:批量更新 ,註意update的separator是;,和批量插入的不一樣。
Sql代碼下載
- <update id="batchUpdateQuantity" parameterType="java.util.List">
- <foreach collection="list" item="item" index="index" open="" close="" separator=";">
- update erp_store
- <set>
- quantity=#{item.quantity},
- update_date=#{item.updateDate}
- </set>
- where id = #{item.id}
- </foreach>
- </update>
經測試,一共1662條數據,批量插入用時466ms,迴圈單獨插入用時1898ms。可以批量操作效率高很多。
3、批量插入
Java代碼下載
- <insert id="batchInsert">
- INSERT INTO erp_store_detail(
- id,
- store_id,
- type,
- change_quantity,
- after_quantity,
- update_date,
- remarks,
- link_id
- ) VALUES
- <foreach collection="list" item="item" index="index" separator="," >
- (
- #{item.id},
- #{item.store.id},
- #{item.type},
- #{item.changeQuantity},
- #{item.afterQuantity},
- #{item.updateDate},
- #{item.remarks},
- #{item.linkId}
- )
- </foreach>
- </insert>