1. 程式人生 > >mybatis 中的批量新增、刪除、修改

mybatis 中的批量新增、刪除、修改

現在很多公司和個人開始都會使用到mybatis 框架,而mybatis框架是一個orm框架,所以 資料庫的 insert 、update、 delete 那肯定是必須的,但有個問題就是效能的問題。

這麼說吧:看到有人在使用mybatis批量刪除批量新增的時候還在程式中使用for迴圈來呼叫方法,這樣是沒錯,但是效能稍微低一點,所以下面看幾個批量處理的例子,相對直接在程式中for迴圈的效率要高一點:

1、批量新增:

  1. <insertid="batchInsert"parameterType="java.util.List">
  2.     INSERT INTO STUDENT (id,name,sex,tel,address)  
  3.     VALUES   
  4.     <foreachcollection="list"item="item"index="index"separator=",">
  5.         (#{item.id},#{item.name},#{item.sex},#{item.tel},#{item.address})  
  6.     </foreach>
  7. </insert>

2、批量修改:

  1. <updateid="batchUpdate"parameterType="java.util.List">
  2.     UPDATE STUDENT SET name
     = "250" WHERE id IN  
  3.     <foreachcollection="list"item="item"index="index"open="("separator=","close=")">
  4.         #{item}  
  5.     </foreach>
  6. </update>

3、批量刪除:
  1. <deleteid="batchDelete"parameterType="java.util.List">
  2.     DELETE FROM STUDENT WHERE id IN  
  3.     <foreachcollection
    ="list"index="index"item="item"open="("separator=","close=")">
  4.         #{item}   
  5.     </foreach>
  6. </delete>

這種批量插入、修改、刪除的方式比程式中for迴圈呼叫快原因如下:(1)、網路間傳遞的資料量少,當然傳遞的時間就少了很多。(2)、請求資料庫服務的次數少,因為連線資料庫服務是很耗時的(所以出了資料庫連線池)。(3)、mybatis 在執行的時候才會獲取Connection ,statement 物件所以想不for迴圈少建立了很多物件。

(4)、mybatis 的 執行方式有三種即:SIMPLEREUSEBATCH 三種方式,如果方便的話設定一下,如果使用SIMPLE每一次執行都建立Statement物件並執行,如果使用REUSE  則重複使用preparedStatement 物件來執行 而BATCH 就是批量執行了而mybatis預設就是使用 SIMPLE 方式來執行,所以我們要注意最起碼是不是應該是REUSE  執行方式。

三種執行方式之前的文章中已介紹過了,這裡就不重複。三種執行方式文章地址