- 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...