1. Verzögerung der Belastung
Ergebnismap kann erweiterte Zuordnung implementieren (mithilfe von Assoziation und Sammlung, um Eins-zu-Eins- und Eins-zu-Viele-Mapping zu implementieren). Die Assoziation und die Sammlung haben faule Ladefunktionen.
Ladeverzögerung: Erstfragen Sie zuerst aus einer einzelnen Tabelle und assoziieren Sie die Abfrage bei Bedarf aus der zugehörigen Tabelle, wobei die Datenbankleistung erheblich verbessert wird, da das Abfragen einer einzelnen Tabelle schneller als die Abfrage mehrerer Tabellen ist.
Konfigurieren Sie in MyBatis Core -Konfigurationsdatei:
LazyLoadingNabled, AggresivalAnyloading
Einstellungen | beschreiben | Zulässige Werte | Standardwert |
LazyLoadingNabled | Globale Einstellungen Lazy Loading. Wenn sie auf "False" gesetzt sind, werden alle zugeordneten initialisiert und geladen. | wahr | FALSCH | FALSCH |
Aggressive Lade | Wenn Sie auf "True" gesetzt sind, können faule Ladeobjekte von allen faulen Eigenschaften geladen werden. Andernfalls wird jede Eigenschaft nach Bedarf geladen. | wahr | FALSCH | WAHR |
<einstellungen> <Einstellung name = "LazyLoadingEnabled" value = "true"/> <Einstellungsname = "AggressiveSivalAnaLoading" value = "false"/> </Einstellungen>
Gelegenheit:
Wenn nur einige Datensätze zugeordnet werden müssen, um andere Informationen zu erhalten, können sie nach Bedarf die Belastung verzögern. Wenn die zugehörige Abfrage erforderlich ist, wird SQL an die Datenbank ausgegeben, um die Datenbankleistung zu verbessern.
Wenn alle zugehörigen Abfrageinformationen benötigt werden, müssen Sie zu diesem Zeitpunkt nicht das Laden verzögern. Geben Sie einfach alle zugehörigen Abfrageinformationen zurück. Sie können das resultType oder resultMap verwenden, um die Zuordnung zu vervollständigen.
Zwei: Fall: (Eins-zu-Many in Abteilung und Mitarbeitern)
Quellcode Einführung:
1.Dept.java
Paket cn.zhang.entity; import java.util.hashset; import Java.util.set; öffentliche Klasse Abteilung {private Integer Deptno; private String Deptname; private set <EMP> emp = new Hashset <EMP> (); @Override public String toString () {return "deptno =" + deptno + ", deptname =" + deptname + ", emp =" + emp + "]"; } public Integer getDeptno () {return deptno; } public void setDeptno (Integer Deptno) {this.deptno = deptno; } public String getDeptname () {return Deptname; } public void setDeptname (String Deptname) {this.deptname = deptname; } public set <EMP> getEmp () {return emp; } public void setEmp (set <Em emp> emp) {this.eMp = emp; }}2.emp.java
Paket cn.zhang.entity; public class emp {private Integer empno; privates String Empname; @Override public String toString () {return "emp [empno =" + empno + ", empname =" + empname + "]"; } public Integer getEmpno () {return empno; } public void setEmpno (Ganzzahl empno) {this.eMpno = empno; } public String getEmpname () {return empname; } public void setEmpname (String empname) {this.empname = empname; }}3.Mybatisutil.java
Paket cn.zhang.util; import Java.io.ioException; import Java.io.reader; import org.apache.ibatis.io.resources; import org.apache.ibatis.Session.sqlSession; importieren org.apache.ibatis.Session.sqlSessionFactory; org.apache.ibatis.session.sqlSessionFactoryBuilder;/*** Werkzeugklasse***/öffentliche Klasse myBatisutil {private statische String config = "mybatis-config.xml"; statischer Leserleser; static {try {reader = ressourcen.getResourceAsReader (config); } catch (ioException e) {e.printstacktrace (); }} private statische SQLSessionFactory Factory = new SQLSessionFactoryBuilder () .build (Leser); // Bieten Sie eine Methode an, mit der die Sitzung öffentlich static SQLSession getSession () ioException {SQLSession Session = factory.openSession () ausgelöst werden kann; Rückgabesitzung; }}4.Deptdao.java
Paket cn.zhang.dao; import Java.io.ioException; importieren cn.zhang.entity.dept; public interface Deptdao { / ** * Abfragen Sie den angegebenen Datensatz * @return * @throws ioException * / public DeptById (Integer id).5.Deptdao.xml
<? namespace = "cn.zhang.dao.deptdao"> <!-3. Abfrage-Mitarbeiterinformationen basierend auf der Mitarbeiter-ID-> <select id = "selectEmpByDeptno" resultType = "EMP"> SELECT EMPNO, EMPNAME aus EMP, wobei DEPTNO = {{DEPTNO} </SELECT> </SELECT> <!-2. id="deptMapper"> <id property="deptno" column="deptno" /> <result property="deptname" column="deptname" /> <!-- One-to-many department-related employees --> <!--select: Associated employee query --> <!--column: Conditions required for associate employee query (source from 1) --> <collection property="emp" ofType="Emp" select = "selectEmpByDeptno" column = "deptno" /> < /resultMap> <!-1. Abfrageabteilung Informationen basierend auf Abteilungs -ID -> <select id = "findById" resultMap = "DeptMapper"> Select Deptno, Deptname aus der Dept, wobei Deptno =#{Deptno} </select> </mapper>6.Mybatis-config.xml (die Konfiguration für faules Laden ist hier)
<? FALSCH. Wenn falsch: Dann werden alle zugeordneten initialisiert und geladen. AggressiveivyLoading: Standard ist wahr. Wenn sie auf True gesetzt sind, können faul beladene Objekte durch faule Attribute geladen werden. Andernfalls wird jedes Attribut nach Bedarf geladen. -> <Einstellungen> <!-Schalten Sie den verzögerten Ladeschalter ein-> <Einstellungsname = "LazyLoadingEnabled" value = "true" /> <!-aktivieren Sie das Laden von aktiven Laden, die nach Bedarf geladen werden. Der einfache Klassenname unter dem aktuell angegebenen Paket als alias-> <package name = "cn.zhang.entity" /> < /typealiases> <Environments Default = "Oracle"> <Environment ID = "Oracle"> <!-Transaktionen mit jdbc-> <transactionManager type = "jdbc" /> <! Datenbank I verwenden Sie -> <Eigenschaft name = "treiber" value = "oracle.jdbc.driver.oracledriver </Umgebungen> <mapper> <mapper ressourcen = "cn/zhang/dao/deptdao.xml"/> </mappers> </configuration>
7.MyTest.java (Testklasse)
Paket cn.zhang.test; // Eins-zu-Many-Import java.io.ioException; import org.apache.ibatis.Session.sqlSession; Import org.junit.befür; cn.zhang.util.mybatisutil; öffentliche Klasse myTest {Deptdao dao; @Before public void initdata () löst ioException {SQLSession Session = mybatisutil.getSession () aus; DAO = Session.getMapper (Deptdao.Class); } / *** Abfragen Sie den angegebenen Datensatz* @throws ioException* / @Test public void findAll () löscht ioException {Dept Dept = dao.findbyId (1) aus; System.out.println (Abteilung); }}Testergebnisse:
Unterbrechungspunkt unten
Situation 1: Keine Konfiguration in mybatis-config.xml
Situation 2: Konfigurieren Sie in mybatis-config.xml
<einstellungen> <!-Schalten Sie den verzögerten Ladeschalter ein-> <Einstellungsname = "LazyLoadingEnabled" value = "true" /> <!-Das Laden von Aktiven in das Laden von Meldungen ändern, die nach Bedarf geladen werden-> <Einstellungsname = "Aggressive LeftazyLading" Value = "False" /> < /> < /
Nächster Schritt:
F6 Nächster Schritt:
F6 Nächster Schritt: Geben Sie den Namen des Mitarbeiters ein
Situation 3:
F6 Nächster Schritt:
F6 Weiter: Drucken Sie den Namen des Mitarbeiters aus
Das obige ist die Verzögerung des Ladens in MyBatis, die Ihnen vom Herausgeber vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!