怠zyな戦略の原則:クエリSQLによって返されたデータが実際にデータベースに発行される場合のみ、それ以外の場合は発行されません(主に複数のテーブルの共同クエリで使用されます)
1. 1対1の怠zyなロード:
データベースに個人テーブルとカードテーブルがあるとします。個人テーブルにはフィールドPID、PNAME、PAGE、PSEX、CID、およびカードテーブルにはフィールドCID、CNUMがあります。
誰かの名前とID番号を照会したいとします。
原則:名前を照会するとき、実際のバージョンはID番号を照会しません。現在のステーションがID番号を使用する場合にのみ、カードにクエリを発行します。 ID番号を照会する戦略です。
実装例:
実装手順:
1-Import MyBatis依存関係JARパッケージ
2-ADD log4jファイル(メモリ内の実際の実行プログラムを表示できます)
1原P:現在のステーションがID番号を使用する場合にのみ、カードのクエリが発行されます。
2-Open Lazy:in conf.xml
<settings> <setting name = "lazyloadingEnabled" value = "true"/> <setting name = "aggressivelazyloading" value = "false"/> </settings>
3。実装:
(1)mapper.xmlマッピングファイル:
<select id = "findcid" parametertype = "int" resulttype = "card"> select * from card where cid =#{value} < /selectmap> <resultmap type = "person" id = "p_c1"> <id colummen列= "psex" property = "psex"/> <associationプロパティ= "card" javatype = "card" select = "findcid" column = "cid"> </associate> </resultmap> <selectscardlazybypid "parametertype =" int "resultmap =" p_c1 " 1-Select:関連するクエリステートメントを指定します
2コラム:メインステートメントのどのフィールドの値がスレーブSQLステートメントのパラメーターとして渡されるかを指定します
(2)マッパーインターフェイスのメソッドを定義します。
パブリックパーソンSelectPersonAndCardLazyBypid(int pid);
(3)Junitを使用したテスト結果:
1.ここに、個人情報のみを送信するクエリがあります。
@test public void testSelectErectPersonAndCardLazyBypid(){// Lazy Policy One-One人P = PM.SELECTPERSONANDCARDLAZYBYPID(1); //system.out.println(p); system.out.println(p.getpname()+"、"); //system.out.println(p.getPname()+"、"+p.getCard()。getCnum()); }結果実行クエリステートメント:
2。カードへのクエリは、現在のステーションがID番号を使用する場合にのみ発行されます
@test public void testSelectErectPersonAndCardLazyBypid(){// Lazy Policy One-One人P = PM.SELECTPERSONANDCARDLAZYBYPID(1); //system.out.println(p); system.out.println(p.getpname()+"、"); system.out.println(p.getpname()+"、"+p.getcard()。getcnum()); //カードのクエリは、現在のステーションがID番号を使用するときに発行されます}結果実行クエリステートメント:
2。1対多怠zyなロード:
実装例:
データベースに個人テーブルとカードID情報テーブルがあると仮定します。アドダーアドレステーブル:人のテーブルにフィールドがpid、pname、page、psex、cid、card table、およびadderテーブルにフィールドcnumがあります。 Adderテーブルには、フィールドエイド、ASHI、PIDがあります
誰かの名前と住所、およびID番号を照会したいとします。
(1)mapper.xmlマッピングファイル:
<! - Lazy Strategy One-many-> <select id = "fingcard_adder" parametertype = "int" resultType = "adder"> select * from adder where pid =#{value} </select> <select id = "findcid1" parametertype = "int" resultType = " type = "person" id = "p_c1_a1"> <id column = "pid" property = "pid" /> <result column = "pname" property = "pname" /> <result column = "page" property = "page" /> <result column = "psex" property = "psex" />> <associationプロパティ= " <コレクションプロパティ= "adder" oftype = "adder" select = "fingcard_adder" column = "pid"> </collectionmap> </select id = "parametertype =" int "resultmap =" p_c1_a1 "(2)マッパーインターフェイス定義方法:
1.ここに、個人情報のみを送信するクエリがあります。
@test public void testSelectErectPersonAndCardAddderLazyBypid(){// Lazy Policy One-Many人p = PM.SelectPersonAndCardAddderLazyBypid(1); system.out.println(p.getpname()+"、"); ///ここに個人情報のみを送信するクエリがあります}結果実行クエリステートメント:
2。ここに、個人情報と身元情報を発行するためのクエリがあります。
@test public void testSelectErectPersonAndCardAddderLazyBypid(){// Lazy Policy One-Many人p = PM.SelectPersonAndCardAddderLazyBypid(1); system.out.println(p.getpname()+"、"); //ここに、個人情報のみを放出するクエリがあります。 system.out.println(p.getpname()+"、"+p.getcard()。getcnum()); }結果実行クエリステートメント:
3.個人情報、身元情報、住所情報のクエリがここで発行されます。
@test public void testSelectErectPersonAndCardAddderLazyBypid(){// Lazy Policy One-Many人p = PM.SelectPersonAndCardAddderLazyBypid(1); system.out.println(p.getpname()+"、"); //これは、個人情報のみを放出するクエリです。 system.out.println(p.getpname()+"、"+p.getcard()。getcnum()); //これは、個人の情報と身元情報を発するクエリです。 //system.out.println(p.getPname()+"、"+p.getCard()。getCnum()); for(adder adder:p.getadder()){/////個人情報のクエリ、身元情報と住所情報がここで発行されます。 System.out.println(adder.getashi()); }}結果実行クエリステートメント:
要約します
上記は、あなたに紹介されたMyBatisの怠zyな戦略を遅らせる方法です。それがあなたに役立つことを願っています。ご不明な点がございましたら、メッセージを残してください。編集者は時間内に返信します!