Mybatis如何實現高效批量多值更新

2021-09-28 20:24:49 字數 2669 閱讀 3290

本文在springboot整合mybaits的情境下,實現高效批量更新。

第一種:

首先能夠想到的是

<

update id=

"updmsg"

>

"list" item=

"item" separator=

";">

update user_info_ref_project set name=

#,num=# where id=#

<

/foreach>

<

/update

>

等同於:

update user_info_ref_project set name=

"1"...

where id =..

.update user_info_ref_project set name=

"2"...

where id =..

.update user_info_ref_project set name=

"3"...

where id =..

.update user_info_ref_project set name=

"4"...

where id =..

.update user_info_ref_project set name=

"5"...

where id =..

.

但是這種方法的效率非常低,而且非常消耗資料庫資源,基本相當於在**裡面實現迴圈更新,不可取。

第二種:

利用case when,實質上就是sql的拼接字串。

<

update id=

"listupdossfile" parametertype=

"com.oss.model.sizekeymodel"

>

update

$_file_record_msg

<

--無論有多少個字段都只有乙個set標籤,本人在寫的時候,這個地方就出過錯誤,搞了好久才找到原因-->

"set" suffixoverrides=

",">

"file_size =case" suffix=

"end,"

>

"filemsglist" item=

"item"

index

="index"

>

when

oss_key=

# and member_id=#

then

#<

/foreach>

<

/trim>

<

--一般有多少個需要動態更新的字段就用幾個這樣的trim標籤-->

"enable =case" suffix=

"end,"

>

"filemsglist" item=

"item"

index

="index"

>

when

oss_key=

# and member_id=#

then

#<

/foreach>

<

/trim>

<

/trim>

where

member_id =

# and

oss_key in

"filemsglist"

index

="index" item=

"item" separator=

","open

="("

close

=")"

>

#<

/foreach>

<

/update

>

如果第一種方案算是五條sql,那麼第二種就只是算一條sql,其在mysql中的展示形式為:

update

$_file_record_msg

set

file_size =

(case

when oss_key=

# then #),

enable=(

case

when oss_key=

# then #),

file_size =

(case

when oss_key=

# then #),

enable=(

case

when oss_key=

# then #),

file_size =

(case

when oss_key=

# then #),

enable=(

case

when oss_key=

# then #),..

....

where oss_key in

(#,#,#,...)

第二種方案是目前實現批量多欄位更新比較好的一種方式,極大的節約了資源。

MyBatis批量刪除功能實現

首先定義全選框的的id屬性id summarybox 然後定義乙個資料單選框的class屬性class itembox 說明 adminid屬性是html標籤本身並沒有的屬性,是我們強行設定的。整個表單檔案 賬號名稱 郵箱位址 操作 抱歉,沒有使用者查詢的資料!全選 全不選功能 summarybox...

mybatis大批量資料批量更新高效率解決辦法

mybatis批量更新有兩種方式 1 第一種就是普通的迴圈每條資料進行更新,這種方式最大的問題就是效率問題,逐條更新,每次都會連線資料庫,然後更新,再釋放連線資源 雖然通過連線池可以將頻繁連線資料的效率大大提高,抗不住資料量大 這中損耗在資料量較大的時候便會體現出效率問題。這也是在滿足業務需求的時候...

mybatis 如何批量運算元據庫

1 通過foreach 在sql裡面批量運算元據 示例如下 insert into t user user name,real name,mobile,email,note,position id values 2 mybatis 批量 提交資料庫 mybatis的執行器有三種型別 這個型別不做特殊...