1. 程式人生 > >mybatis---關聯表的增刪改三種方式

mybatis---關聯表的增刪改三種方式

在hibernate的配置檔案中,有cascade屬性,供我們設定關聯表的增刪改,但是在mybatis中,並沒有這樣的機制,因此需要我們自己去寫。

這裡有三種解決辦法。

1.事務處理。

mybatis的配置中,一個標籤中是隻能寫一條sql語句的,從安全上講,也不能直接將兩條sql語句放在一起執行,一個比較好的辦法就是在service中同時執行多個方法,進行事務處理,要不幾條sql同時生效,要不然同時不生效,與spring結合之後,這種方法更佔優勢,也更方便。

2.在資料庫中設定外來鍵。

以oracle資料庫為例,在資料庫中增加表關係,這是資料庫本身所帶的機制,如下,可以在增加外來鍵的時候設定級聯,如果已經設定有外來鍵,需要把外來鍵刪除再重新寫,也可以用檢視中對錶進行edit,可以設定關聯刪除,或者將關聯的外來鍵欄位值這位null, set null。

  1. createtable district(  
  2. id      number primarykey
  3. ,name   varchar2(50)  
  4. ,manager  varchar2(20)  
  5. ,square   varchar2(20)  
  6. ,population number  
  7. );  
  8. createtable street(  
  9. id    number primarykey
  10. ,district_id number  
  11. ,name     varchar2(50)  
  12. ,length   varchar2(20)  
  13. ,manager    varchar2(20)  
  14. ,creater    varchar2(20)  
  15. );  
  16. 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;