Lazy Strategy Prinzip: Nur wenn die von der Abfrage zurückgegebenen Daten SQL verwendet werden, wird tatsächlich in der Datenbank ausgegeben, ansonsten wird sie nicht ausgestellt (hauptsächlich in gemeinsamen Abfragen mehrerer Tabellen)
1. Eins zu eins fauler Laden:
Angenommen, in der Datenbank befindet sich eine Personentabelle und eine Kartentabelle: Die Personentabelle verfügt über Felder, PNAME, PAGE, PSEX, CID und Kartentabelle haben Felder CID, cnum;
Angenommen, Sie möchten den Namen und die ID -Nummer eines Menschen abfragen:
Prinzip: Beim Abfragen des Namens wird die tatsächliche Version die ID -Nummer nicht abfragt. Nur wenn die aktuelle Station die ID -Nummer verwendet, wird die Karte eine Abfrage ausgestellt. Es ist eine Strategie, die ID -Nummer abzufragen.
Implementierungsbeispiel:
Implementierungsschritte:
1-Import MyBatis Abhängigkeit JAR-Paket
2-ADD-LOG4J-Datei (kann die tatsächlichen Ausführungsprogramme im Speicher anzeigen)
1 Prinzip: Nur wenn die aktuelle Station die ID-Nummer verwendet wird, wird die Abfrage zur Karte ausgestellt, ansonsten wird nur die Abfrage an die Personsinformationen ausgestellt.
2-öffentlich faul: In Conf.xml
<einstellungen> <Einstellung name = "LazyLoadingEnabled" value = "true"/> <Einstellungsname = "AggressiveSivalAnaLoading" value = "false"/> </Einstellungen>
3. Implementierung:
(1) In der Mapper.xml -Zuordnungsdatei:
<select id="findCid" parameterType="int" resultType="card"> select * from card where cid=#{value} </select> <resultMap type="person" id="p_c1"> <id column="pid" property="pid" /> <result column="pname" property="pname" /> <result column="page" property="page" /> <result column="psex" property="psex" /> <association property="card" javaType="card" select="findCid" column="cid"> </association> </resultMap> <select id="selectpersonAndCardLazyByPid" parameterType="int" resultMap="p_c1"> SELECT * FROM person where pid=#{value} </select> 1-selekt: Geben Sie die zugehörige Anweisung an der Abfrage an
2-Säulen: Geben Sie an, welcher Feld des Feldes in der Hauptanweisung als Parameter an die Slave SQL-Anweisung übergeben wird
(2) Definieren Sie die Methode in der Mapper -Schnittstelle:
öffentliche Person SelectPerson undCardLazyBypid (int PID);
(3) Testergebnisse mit JUNIT:
1. Hier ist eine Abfrage, die nur Personeninformationen sendet;
@Test public void testSelectPersonandCardLazyBypid () {// Lazy Policy Eins-zu-Eins-Person p = pm.SelectpersonandCardLazyBypid (1); //System.out.println(p); System.out.println (p.getPname ()+","); //System.out.println(p.getPname ()+","+p.getCard (). GetCnum ()); }Die Anweisung der Ergebnisausführung Abfrage:
2. Die Abfrage zur Karte wird nur ausgestellt, wenn die aktuelle Station die ID -Nummer verwendet
@Test public void testSelectPersonandCardLazyBypid () {// Lazy Policy Eins-zu-Eins-Person p = pm.SelectpersonandCardLazyBypid (1); //System.out.println(p); System.out.println (p.getPname ()+","); System.out.println (p.getPname ()+","+p.getCard (). GetCnum ()); // Die Abfrage für die Karte wird ausgestellt, wenn die aktuelle Station die ID -Nummer} verwendet}Die Anweisung der Ergebnisausführung Abfrage:
2. Ein-zu-Many-Faulenladen:
Implementierungsbeispiel:
Angenommen, in der Datenbank gibt es eine Personentabelle und eine Kartenidentitätsinformationstabelle, die Adder -Adress -Tabelle: wobei in der Personentabelle, PNAME, PAGE, PSEX, CID, Kartentabelle und Felder Cnum in der Addertabelle Felder PID befinden. Die Addertabelle hat Fields Aid, Ashi, PID
Angenommen, Sie möchten den Namen und die Adresse eines Menschen und Ihre ID -Nummer abfragen:
(1) Mapper.xml Mapping -Datei:
<!-Lazy Strategy Eins-zu-Many-> <select id = "fingcard_adder" parameterType = "int" resultType = "Adder"> aus adder wob Typ = "Person" id = "p_c1_a1"> <id column = "pid" property = "pid" /> <result column = "pname <Collection Eigenschaft = "Adder" vontype = "Adder" select = "fingcard_adder" column = "pid"> </collection> </resultmap> <select id = "selectPersonandCardAndderLazyByPID" Parameterype = "int" resultMap = "p_c1_a1> select * from person, wob
(2) Mapper -Schnittstellendefinitionsmethode:
1. Hier ist eine Abfrage, die nur Personeninformationen sendet;
@Test public void testSelectPersonandCardAndderLazyBypid () {// Lazy Policy Eins-zu-Many-Person p = PM.SelectpersonandCardandAdaDaDaDaDaDaNlazyBypid (1); System.out.println (p.getPname ()+","); //// Hier ist eine Abfrage, die nur Personsinformationen sendet}Die Anweisung der Ergebnisausführung Abfrage:
2. Hier ist eine Abfrage zur Ausgabe von Informationen und Identitätsinformationen;
@Test public void testSelectPersonandCardAndderLazyBypid () {// Lazy Policy Eins-zu-Many-Person p = PM.SelectpersonandCardandAdaDaDaDaDaDaNlazyBypid (1); System.out.println (p.getPname ()+","); // Hier ist eine Abfrage, die nur Personeninformationen abgibt; System.out.println (p.getPname ()+","+p.getCard (). GetCnum ()); // Hier ist eine Abfrage, die Informationen und Identitätsinformationen ausgibt; }Die Anweisung der Ergebnisausführung Abfrage:
3. Die Abfrage von Personeninformationen, Identitätsinformationen und Adressinformationen wird hier ausgestellt;
@Test public void testSelectPersonandCardAndderLazyBypid () {// Lazy Policy Eins-zu-Many-Person p = PM.SelectpersonandCardandAdaDaDaDaDaDaNlazyBypid (1); System.out.println (p.getPname ()+","); // Dies ist eine Abfrage, die nur Personeninformationen abgibt; System.out.println (p.getPname ()+","+p.getCard (). GetCnum ()); // Dies ist eine Abfrage, die Informationen und Identitätsinformationen ausgibt; //System.out.println(p.getPname ()+","+p.getCard (). GetCnum ()); für (Adder Adder: P.GetADDDER ()) {///// Abfrage von Personeninformationen, Identitätsinformationen und Adressinformationen werden hier ausgestellt; System.out.println (adder.getashi ()); }} Die Anweisung der Ergebnisausführung Abfrage:
Zusammenfassen
Das obige ist die Methode zur Verzögerung des Ladens von Faulenstrategien in MyBatis, die Ihnen vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten!