Heim > Java > javaLernprogramm > Hauptteil

Detaillierte Erklärung des MyBatis-Lazy-Loading-Beispiels

零下一度
Freigeben: 2017-06-25 10:38:13
Original
1291 Leute haben es durchsucht

1. Was ist Lazy Loading? Zu-Eins- und Eins-zu-Viele-Zuordnung),
Assoziation und Sammlung verfügen über eine Lazy-Loading-Funktion.
Anforderungen:

Wenn Sie die Bestellung abfragen und damit verbundene Benutzerinformationen abfragen. Wenn wir zuerst die Bestellinformationen abfragen, können wir die Anforderungen erfüllen. Wenn wir die Benutzerinformationen abfragen müssen, überprüfen wir die Benutzerinformationen. Das Abfragen von Benutzerinformationen bei Bedarf ist Lazy Loading. Verzögertes Laden: Zuerst eine Abfrage aus einer einzelnen Tabelle durchführen und dann bei Bedarf verwandte Abfragen aus verwandten Tabellen durchführen, was die Datenbankleistung erheblich verbessert, da die Abfrage einer einzelnen Tabelle schneller ist als die Abfrage mehrerer Tabellen auf verwandte Weise.

2. Verwenden Sie die Zuordnung, um Lazy Loading zu implementieren

2.1 Anforderungen

Fragen Sie Aufträge ab und verknüpfen Sie Abfragebenutzerinformationen

2.2mapper.xml

Es ist notwendig, die Anweisungen zu definieren, die den beiden Mapper-Methoden entsprechen.

(1) Nur Bestellinformationen abfragen

SELECT * FROMorders

In der Abfrageanweisung order

Verwenden Sie die Zuordnung, um das Laden (Ausführen) der folgenden Anweisung zu verzögern (Zugehörige Benutzerinformationen abfragen).

(2) Benutzerinformationen nach Zuordnung abfragen

Verwenden Sie die user_id in den oben abgefragten Bestellinformationen, um Benutzerinformationen nach Zuordnung abzufragen
    <!-- 查询订单关联查询用户  --><select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoadingResultMap">SELECT * FROM orders</select>
Nach dem Login kopieren
Verwenden Sie findUserById

Führen Sie zuerst findOrdersUserLazyLoading aus. Wenn Sie den Benutzer abfragen müssen, wird die Lazy-Loading-Ausführungskonfiguration ausgeführt Definition von resultMap aufstehen.

2.3 Lazy Loading von resultMap
    <select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{value}</select>
Nach dem Login kopieren
Verwenden Sie select in Verbindung, um die ID der Anweisung anzugeben, die durch Lazy Loading ausgeführt werden soll.

2.4mapper.java

    <!-- 延迟加载的resultMap  --><resultMap type="joanna.yan.mybatis.entity.Orders" id="OrdersUserLazyLoadingResultMap"><!-- 1.对订单信息进行映射配置 --><id column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property="note"/><!-- 2.实现对用户信息进行延迟加载 --><!-- select:指定延迟加载需要执行的statement的id(是根据user_id查询用户信息的statement) 
               要使用UserMapper.xml中findUserById完成根据用户id(user_id)用户信息的查询,
               如果findUserById不在本mapper中需要前边加namespace。
             column:订单信息中关联用户信息查询的列,是user_id
              关联查询的sql理解为:
             SELECT orders.*,
                (SELECT username FROM USER WHERE orders.user_id = user.id)username,
                (SELECT sex FROM USER WHERE orders.user_id = user.id)sex
             FROM orders--><association property="user" javaType="joanna.yan.mybatis.entity.User"select="joanna.yan.mybatis.mapper.UserMapper.findUserById" column="user_id"></association></resultMap>
Nach dem Login kopieren
2.5 Test

2.5.1 Testidee
    //查询订单关联查询用户,用户信息时延迟加载public List<Orders> findOrdersUserLazyLoading() throws Exception;
Nach dem Login kopieren
(1) Führen Sie die obige Mapper-Methode (findOrdersUserLazyLoading) aus und rufen Sie intern findOrdersUserLazyLoading in joanna.yan.mybatis.mapper.OrdersCustomMapper auf, um nur Bestellinformationen abzufragen (einzelne Tabelle).

(2) Durchlaufen Sie im Programm die im vorherigen Schritt abgefragte Liste Wenn wir getUser() in Orders aufrufen, beginnt das verzögerte Laden.

(3) Verzögern Sie das Laden und rufen Sie die findUserById-Methode in UserMapper.xml auf, um Benutzerinformationen abzurufen.

2.5.2 Konfiguration für verzögertes Laden

Mybatis aktiviert standardmäßig kein verzögertes Laden und muss in SqlMapConfig.xml konfiguriert werden.

Konfiguriert in der Mybatis-Kernkonfigurationsdatei:

lazyLoadingEnabled, aggressiveLazyLoading

Einstellungselement

Beschreibung

Zulässige Werte

Standardwert

lazyLoadingEnabled

Lazy Loading global festlegen. Wenn auf „false“ gesetzt, werden zunächst alle zugehörigen geladen.

true |. false

设置项

描述

允许值

默认值

lazyLoadingEnabled

全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。

true | false

false

aggressiveLazyLoading

当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。

true | false

true

false

aggressiveLazyLoading

Wenn auf „true“ gesetzt, können verzögert geladene Objekte vollständig mit allen verzögert geladenen Attributen geladen werden. Ansonsten wird jede Eigenschaft bei Bedarf geladen.

true |. false

     <!-- 全局配置参数,需要时再设置  --> <settings> <!-- 打开延迟加载的开关  --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 将积极加载改为消极加载即按需要加载 --> <setting name="aggressiveLazyLoading" value="false"/> </settings>
Nach dem Login kopieren

true

Konfiguriert in SqlMapConfig.xml:

    @Testpublic void findOrdersUserLazyLoadingTest() throws Exception{
        SqlSession sqlSession=sqlSessionFactory.openSession();
        OrdersCustomMapper ordersCustomMapper=sqlSession.getMapper(OrdersCustomMapper.class);
        List<Orders> list=ordersCustomMapper.findOrdersUserLazyLoading();for (Orders orders : list) {//执行getUser()去查询用户信息,这里实现按需加载User user=orders.getUser();
            System.out.println(user);
        }
        sqlSession.close();
    }
Nach dem Login kopieren

2.5.3 Testcode

2.6 Gedanken zum Lazy Loading

So implementieren Sie dies, ohne die von bereitgestellte Lazy-Loading-Funktion in Assoziation und Sammlung zu verwenden mybatis Lazy Loading?

Die Implementierungsmethode ist wie folgt:

Definieren Sie zwei Mapper-Methoden:

(1) Fragen Sie die Bestellliste ab

(2) Fragen Sie Benutzerinformationen basierend ab auf Benutzer-ID

Implementierungsidee: Fragen Sie zuerst die erste Mapper-Methode ab und erhalten Sie die Bestellinformationsliste Rufen Sie im Testprogramm nach Bedarf die zweite Mapper-Methode auf, um Benutzerinformationen abzufragen. Kurz gesagt, fragen Sie mit der Lazy-Loading-Methode zunächst einfaches SQL ab (vorzugsweise eine einzelne Tabelle, aber auch verwandte Abfragen) und laden Sie dann nach Bedarf weitere Informationen für verwandte Abfragen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des MyBatis-Lazy-Loading-Beispiels. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!