mybatis---關聯表的增刪改三種方式
阿新 • • 發佈:2019-01-10
在hibernate的配置檔案中,有cascade屬性,供我們設定關聯表的增刪改,但是在mybatis中,並沒有這樣的機制,因此需要我們自己去寫。
這裡有三種解決辦法。
1.事務處理。
mybatis的配置中,一個標籤中是隻能寫一條sql語句的,從安全上講,也不能直接將兩條sql語句放在一起執行,一個比較好的辦法就是在service中同時執行多個方法,進行事務處理,要不幾條sql同時生效,要不然同時不生效,與spring結合之後,這種方法更佔優勢,也更方便。
2.在資料庫中設定外來鍵。
以oracle資料庫為例,在資料庫中增加表關係,這是資料庫本身所帶的機制,如下,可以在增加外來鍵的時候設定級聯,如果已經設定有外來鍵,需要把外來鍵刪除再重新寫,也可以用檢視中對錶進行edit,可以設定關聯刪除,或者將關聯的外來鍵欄位值這位null, set null。
- createtable district(
- id number primarykey
- ,name varchar2(50)
- ,manager varchar2(20)
- ,square varchar2(20)
- ,population number
- );
- createtable street(
- id number primarykey
- ,district_id number
- ,name varchar2(50)
- ,length varchar2(20)
- ,manager varchar2(20)
- ,creater varchar2(20)
- );
- altertable STREET addconstraint fk_street_district foreignkey(district_id) references DISTRICT(id) ondeletecascade;
3.觸發器
在mybatis配置中不能一次寫兩條sql語句,但是在觸發器中完全可以,其中old代表被刪除表,也就是DISTRICT表的原來資料,如果執行更新語句的話,還有一個new,代表傳入的新資料
[sql] view plain copy
create or replace trigger delete_district
after delete on DISTRICT
for each row
begin
delete from STREET where DISTRICT_ID =:old.id;
end;