mybatis--関連テーブルの削除の3つの方法
1292 ワード
hibernateのプロファイルにはcascadeプロパティがあり、関連テーブルの削除を設定できますが、mybatisではこのようなメカニズムはありませんので、自分で書く必要があります.
ここには3つの解決策がある.
1.取引.
mybatisの構成では、1つのラベルに1つのsql文しか書けません.安全上、2つのsql文を直接一緒に実行することはできません.1つの比較的良い方法はサービスで複数の方法を同時に実行し、トランザクションを行い、いくつかのsqlが同時に有効にならないか、そうでなければ同時に有効になりません.springと結合した後、この方法がもっと優位に立っています.もっと便利です.
2.データベースに外部キーを設定します.
Oracleデータベースの例では、データベースにテーブル関係を追加します.これはデータベース自体が持つメカニズムです.次のように、外部キーを追加するときにカスケードを設定することができます.外部キーが設定されている場合は、外部キーを削除して書き直す必要があります.ビューでテーブルをeditしたり、関連削除を設定したり、関連する外部キーフィールド値null,set nullを設定したりすることができます.
3.トリガー
mybatis構成では一度に2つのsql文を書くことはできませんが、トリガでは完全に可能です.oldは削除されたテーブル、つまりDISTRICTテーブルの元のデータを表します.更新文を実行すると、新しいデータを表すnewがあります.
ここには3つの解決策がある.
1.取引.
mybatisの構成では、1つのラベルに1つのsql文しか書けません.安全上、2つのsql文を直接一緒に実行することはできません.1つの比較的良い方法はサービスで複数の方法を同時に実行し、トランザクションを行い、いくつかのsqlが同時に有効にならないか、そうでなければ同時に有効になりません.springと結合した後、この方法がもっと優位に立っています.もっと便利です.
2.データベースに外部キーを設定します.
Oracleデータベースの例では、データベースにテーブル関係を追加します.これはデータベース自体が持つメカニズムです.次のように、外部キーを追加するときにカスケードを設定することができます.外部キーが設定されている場合は、外部キーを削除して書き直す必要があります.ビューでテーブルをeditしたり、関連削除を設定したり、関連する外部キーフィールド値null,set nullを設定したりすることができます.
create table district(
id number primary key
,name varchar2(50)
,manager varchar2(20)
,square varchar2(20)
,population number
);
create table street(
id number primary key
,district_id number
,name varchar2(50)
,length varchar2(20)
,manager varchar2(20)
,creater varchar2(20)
);
alter table STREET add constraint fk_street_district foreign key(district_id) references DISTRICT(id) on delete cascade;
3.トリガー
mybatis構成では一度に2つのsql文を書くことはできませんが、トリガでは完全に可能です.oldは削除されたテーブル、つまりDISTRICTテーブルの元のデータを表します.更新文を実行すると、新しいデータを表すnewがあります.
create or replace trigger delete_district
after delete on DISTRICT
for each row
begin
delete from STREET where DISTRICT_ID =:old.id;
end;