Mybatisでの接続クエリーとネストクエリー
まずmysqlでテーブルを確立します.
aテーブルのすべての情報をクエリーし、aテーブルの情報に対応するbテーブルの情報があれば、bテーブルの情報をクエリーし、なければクエリーしません.
複数対1、たとえば:すべての人物情報をクエリーし、人物が対応する国がある場合は国情報をクエリーし、ない場合はクエリーしません.複数の人物が一つの国に属している.一対多、例えば:すべての国の情報をクエリーし、国に対応する人物がいる場合は人物情報をクエリーし、ない場合はクエリーしません.一つの国には複数の都市がある.多対多、例えば:すべての国の情報を検索し、国が対応する交通機関を持っている場合は、交通機関の情報を検索し、ない場合は検索しません.同時に、多くの交通手段が複数の国に存在する.
一、接続クエリー:接続クエリーの使用時に、a表のある方向に偏った外部接続を使用して、a表のすべての情報と対応するb表情報を得ることができる.この方式は餓漢式で、メモリの消費量は大きいが、データベースへのアクセス回数が少なく、消費時間が少ない.1、多対一:
2、一対多:
3、多対多:
二、ネストクエリー:ネストクエリーが使用される場合、まずaテーブルの情報をクエリーし、それからaとbテーブルの外部キー制約に依存し、in()を利用して、再びbテーブルがaテーブルに対応する情報をクエリーする.この方式は餓漢式に変更でき、メモリの使用は小さいが、データベースに複数回アクセスする必要があり、消費時間が多い.1、多対一:PersonDaoインタフェース内書き込み:
対応マッピング構成:
AddressDaoインタフェースへのfindAddressByIdの作成を続行します.
AddressDaoプロファイルに戻ります.
2、一対多:AddressDaoインタフェース内書き込み:
対応するマッピング構成:
指定されたPersonDaoインタフェースに対するfindPersonById:
対応するマッピング構成:
ネストされたクエリーの遅延ロードの問題について、構成を追加する必要があります.方法1:associationまたはcollectionに属性を追加します.fetchType=「lazy」メソッド2:
# :
CREATE TABLE address(aid INT AUTO_INCREMENT PRIMARY KEY,aname VARCHAR(20));
INSERT INTO address VALUES(NULL," ");
INSERT INTO address VALUES(NULL," ");
INSERT INTO address VALUES(NULL," ");
# :
CREATE TABLE person(
pid INT AUTO_INCREMENT PRIMARY KEY,
pname VARCHAR(20),
paid INT,
CONSTRAINT pafk FOREIGN KEY person(paid) REFERENCES address(aid) ON UPDATE CASCADE ON DELETE CASCADE
);
INSERT INTO person VALUES(1," ",1);
INSERT INTO person VALUES(2," ",1);
INSERT INTO person VALUES(3," ",1);
INSERT INTO person VALUES(4," ",2);
INSERT INTO person VALUES(5," ",2);
INSERT INTO person VALUES(6," ",2);
INSERT INTO person VALUES(7," ",2);
INSERT INTO person VALUES(8," ",3);
INSERT INTO person VALUES(9," ",3);
INSERT INTO person VALUES(10," ",3);
INSERT INTO person VALUES(11," ",NULL);
# :
CREATE TABLE tool(tid INT AUTO_INCREMENT PRIMARY KEY,tname VARCHAR(20));
INSERT INTO tool VALUES(1," ");
INSERT INTO tool VALUES(2," ");
# : ——
CREATE TABLE aandt(
a_aid INT,
a_tid INT,
PRIMARY KEY(a_aid,a_tid),# , ,
CONSTRAINT FOREIGN KEY aandt(a_aid) REFERENCES address(aid) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT FOREIGN KEY aandt(a_tid) REFERENCES tool(tid) ON UPDATE CASCADE ON DELETE CASCADE
);
INSERT INTO aandt VALUES(1,1);
INSERT INTO aandt VALUES(2,1);
INSERT INTO aandt VALUES(2,2);
INSERT INTO aandt VALUES(3,2);
aテーブルのすべての情報をクエリーし、aテーブルの情報に対応するbテーブルの情報があれば、bテーブルの情報をクエリーし、なければクエリーしません.
複数対1、たとえば:すべての人物情報をクエリーし、人物が対応する国がある場合は国情報をクエリーし、ない場合はクエリーしません.複数の人物が一つの国に属している.一対多、例えば:すべての国の情報をクエリーし、国に対応する人物がいる場合は人物情報をクエリーし、ない場合はクエリーしません.一つの国には複数の都市がある.多対多、例えば:すべての国の情報を検索し、国が対応する交通機関を持っている場合は、交通機関の情報を検索し、ない場合は検索しません.同時に、多くの交通手段が複数の国に存在する.
一、接続クエリー:接続クエリーの使用時に、a表のある方向に偏った外部接続を使用して、a表のすべての情報と対応するb表情報を得ることができる.この方式は餓漢式で、メモリの消費量は大きいが、データベースへのアクセス回数が少なく、消費時間が少ない.1、多対一:
2、一対多:
3、多対多:
二、ネストクエリー:ネストクエリーが使用される場合、まずaテーブルの情報をクエリーし、それからaとbテーブルの外部キー制約に依存し、in()を利用して、再びbテーブルがaテーブルに対応する情報をクエリーする.この方式は餓漢式に変更でき、メモリの使用は小さいが、データベースに複数回アクセスする必要があり、消費時間が多い.1、多対一:PersonDaoインタフェース内書き込み:
// ,
List findPersonFromAddress();
対応マッピング構成:
AddressDaoインタフェースへのfindAddressByIdの作成を続行します.
// id Address
List findAddressById(Integer id);
AddressDaoプロファイルに戻ります.
2、一対多:AddressDaoインタフェース内書き込み:
List findAddressWithPerson();
対応するマッピング構成:
指定されたPersonDaoインタフェースに対するfindPersonById:
List findPersonById(Integer id);
対応するマッピング構成:
ネストされたクエリーの遅延ロードの問題について、構成を追加する必要があります.方法1:associationまたはcollectionに属性を追加します.fetchType=「lazy」メソッド2: