mybatis之批量處理

批量處理即對多條數據進行sql操作,如批量更新,插入,新增。

之前採取過很low的方式,就是在dao層進行循環,對每條數據進行操作。這樣效果可以實現,但是頻繁連接數據庫,性能,效率上非常不好。mybatis支持參數爲list的操作,這樣連接數據庫就一次,把循環的語句寫入到sql語句中,這樣效率會高很多。

如何引入mybatis這裏不做描述。

先看service層方法如何寫

service 接口層定義方法,如:Integer batchUpdate(List<OrderEntity> list);注:對訂單進行批量更新

dao 層也同樣頂一個接口,一般我都用同樣的名字,拷貝起來比較方便,Integer batchUpdate(List<OrderEntity> list);

千萬注意dao層接口是通過mabatis的xml找到真正的實現方式的。

service 實現層 ,public Integer batchUpdate (List<OrderEntity> list){

                             return  dao.batchUpdate (list);//調用dao層的接口,dao層的接口又會找到對應的mybatis的xml的sql語句

                            }

下面開始說重點,就是mybatis的xml裏怎麼寫的

<update id="batchUpdate " parameterType="java.util.List">

    <foreach collection="list" index="index" item="item" separator=";">

           update t_order_table

           <set>

        <trim suffixOverrides=",">
            <if test="item.count != null">
               f_count = #{item.count,jdbcType=BIGINT},
           </if>
           <if test="item.status != null">
              f_status= #{item.status,jdbcType=VARCHAR},
          </if>
       </trim>

           </set>

     <where>
         <trim suffixOverrides=",">
              f_id = #{item.id,jdbcType=BIGINT}
        </trim>
   </where>

   </foreach>

</update>

上面的寫法百度上面都能找到,之所要寫這個主要是因爲,我一直報錯,處理單個沒有問題,一旦數據超過一條就報錯,耽誤了很長時間,後來找到原因,需要在數據庫連接的時候加上一個配置,讓它允許批量處理,

allowMultiQueries=true ,這個很關鍵,一般和字符集一起加上,如:
?characterEncoding=UTF-8&allowMultiQueries=true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章