mybatis與儲存過程

2021-08-21 18:09:53 字數 1626 閱讀 9868

- mybatis呼叫儲存過程

create

procedure

name

(in arg1 type, out arg2 type)

begin

end;

in為輸入引數,out為輸出引數,type為mysql的資料型別,begin和end之間寫sql語句就好了
輸入引數為list,而sql沒有這種型別,所以將list變成以逗號分割的字串,再通過迴圈切割字串得到每個id。

用id去修改user.status達到刪除的目的,通過row_count()返回上一條語句受影響行數,判斷是否刪除成功,不

成功的,查出對應id。

substring_index("1,2,3,4,5,6", ',', 5)

substring_index("1,2,3,4,5,6", ',', -1)

第一行結果是 1,2,3,4,5

第二行結果是 6

drop procedure

ifexists

delete_users;

create

procedure

delete_users

(in users varchar(1000))

begin

declare

length, i, id, exist

intdefault 1;

select substring(users, 2, length(users)-2) into users;

select length(users)-length(replace(users, ',', ''))+1

into length;

while i <= length do

set exist = 0;

select substring_index(substring_index(users, ',', i), ',', -1) into id;

update user set status = 1

where user.user_id = id;

if row_count() = 0

then

select id;

endif; set i = i+1;

endwhile;

end;

可以通過call procedure來呼叫
call delete_users('[1, 2, 3,7]')

call delete_users(#)

select>

dao介面

list invalidusers(@param("users")string users);
注意這裡引數型別是string
測試

@test

public

void invalidusers()

mybatis 呼叫儲存過程

引數形式 create procedure sptest.adder in addend1 integer,in addend2 integer,out thesum integer begin atomic set thesum addend1 addend2 end go parameterma...

mybatis 呼叫儲存過程

至於為什麼用map作為引數,是因為別人寫的儲存過程 可能沒有返回出參,然後就會出現下面的問題。但是別人幾百行上千行的儲存過程,我是絕對不敢去動的。然後就只能用可以為null的物件去接收返回值了,所以就從實體變為了map。void callpwfsubmit mapmap 獲取儲存過程所需要的引數 p...

mybatis 呼叫儲存過程

mybatis中的statementtype詳解 呼叫儲存過程總共有兩總語句 call 和exec 兩種語句複製一下 示例更改即可使用 call 語句 call sp sanwjimport auto exec 語句 exec sp tmailauto 4651 1.使用 update 標籤 2.i...