對於程式設計師來說,在開發的過程中,資料庫操作是必不可少的,尤其是在一次性新增大量資料,或者更新大量資料,好的sql語句執行起來可以節約資料庫的壓力。
批量新增
integer insertuserlist
@param
(value =
"list"
) list
userinfolist)
;
xml層
"insertuserlist"
>
insert into user_info
( user_name,address,age
)values
"list" item=
"item" separator=
",">
(#,#,#)
<
/foreach>
<
/insert>
執行的sql
insert into user_info ( user_name, adress, age)
values
("張三"
,"浙江杭州",18
),("李四"
,"浙江廣州",25
)
批量修改
第一種寫法方式:一條update
這種寫法只能針對於要修改的字段都是相同的值。
integer updateuserlist
@param
(value =
"list"
) list
useridlist)
;
xml層
"updateuserlist"
>
update user_info set age =
18,address =
'浙江省杭州市'
where user_id in (
"list" item=
"item" index=
"index" open=
"" close=
"" separator=
",">
#<
/foreach>
)<
/update >
執行的sql
update user_info
set age =18,
address =
'浙江省杭州市'
where
user_id in (
30069
,30068
)
第二種方式:多條update
這種寫法是可以達到修改每條記錄裡不同欄位的值,但是比較耗費效能,增加了資料庫的壓力,本質上來說,就是把在業務層的for迴圈放到了sql裡去執行,實際上還是多條sql語句。
資料庫鏈結還需要加上:&allowmultiqueries=true
jdbc:mysql:
integer updateuserlist
@param
(value =
"list"
) list
userinfolist)
;
xml層
"updateuserlist"
>
update user_info
"set" suffixoverrides=
",">
"age=case" suffix=
"end,"
>
"list" item=
"cus"
>
when user_id =# then #
<
/foreach>
<
/trim>
"address=case" suffix=
"end,"
>
"list" item=
"cus"
>
when user_id =# then #
<
/foreach>
<
/trim>
<
/trim>
"list" separator=
"or" item=
"cus"
>
user_id =#
<
/foreach>
<
/where>
<
/update>
執行的sql
update user_info set age =
18, address =
'浙江省杭州市'
where user_id =
30069
;update user_info set age =
25, address =
'浙江省雲南市'
where user_id =
30068
;
第三種方式:一條update
可以滿足多條記錄同時修改,且每條記錄字段不同的值
integer updateuserlist
@param
(value =
"list"
) list
useridlist)
;
xml層
"updateuserlist"
>
update user_info
"set" suffixoverrides=
",">
"age=case" suffix=
"end,"
>
"list" item=
"cus"
>
when user_id =# then #
<
/foreach>
<
/trim>
"address=case" suffix=
"end,"
>
"list" item=
"cus"
>
when user_id =# then #
<
/foreach>
<
/trim>
<
/trim>
"list" separator=
"or" item=
"cus"
>
user_id =#
<
/foreach>
<
/where>
<
/update>
執行的sql
update user_info
set age =
case
when user_id =
30069 then 18
when user_id =
30068 then 20
end,
address =
case
when user_id =
30069 then '浙江杭州'
when user_id =
30068 then '四川成都'
end where user_id =
30069 or user_id =
30068
總結一下,如果每條記錄修改的字段值不同,最好用第三種方式去寫sql語句,簡單的話用第一種方式,不推薦用第二種方式去迴圈寫多條sql語句去執行。 mybatis批量修改,批量新增
mybatis批量修改 批量新增sql語句 1 單個新增 insert into t user user name,mobile values 2 新增並返回主鍵 keyproperty的屬性是要返回的主鍵欄位的名稱 insert into t user user name,mobile value...
mybaits批量新增修改
開發中,批量修改資料應該是很常見的功能需求。今晚開發時配置批量修改功能遇到很多坑,浪費了很多時間,特此記錄下來,跟大家分享,今天你看到的坑我都為您鋪平了。批量執行sql語句,無非就是批量修改和批量新增。我用現在使用量最多的框架mybatis寫乙個修改功能給大家做個demo看。其他的自己舉一反三,我不...
mybatis 批量新增修改
1 dao層 int addstoragebatch liststoragelist int updatestoragebatch param storagelist liststoragelist 2 xml檔案 usegeneratedkeys true keyproperty id inser...