Heim  >  Artikel  >  Java  >  Wir stellen die Lösung für Mybatis Lazy Loading vor

Wir stellen die Lösung für Mybatis Lazy Loading vor

Y2J
Y2JOriginal
2017-05-13 10:36:031428Durchsuche

In diesem Artikel wird hauptsächlich die detaillierte Erklärung des verzögerten Ladens im Mybatis-Tutorial vorgestellt. Die Bedeutung und Verwendungsimplementierung von Lazy Loading wird ausführlich vorgestellt. Interessierte können mehr über

Lazy Loading

1 Die Bedeutung der Verwendung von Lazy Loading erfahren

Wenn Sie Datenabfragenabfragen durchführen, versuchen Sie zur Verbesserung der Datenbankabfrageleistung, Einzeltabellenabfragen zu verwenden, da Einzeltabellenabfragen schneller sind als Mehrfachtabellenabfragen verwandte Abfrage.

Wenn die Abfrage einer einzelnen Tabelle die Anforderungen erfüllen kann, fragen Sie zuerst die einzelne Tabelle ab. Wenn verwandte Informationen erforderlich sind, wird dies als verzögertes Laden bezeichnet.

Die resultMap in mybatis stellt die Lazy-Loading-Funktion bereit und das Lazy-Loading wird über die resultMap konfiguriert.

2 Konfigurieren Sie mybatis zur Unterstützung von Lazy Loading

Konfigurieren Sie globale Parameter in SqlMapConfig.xml:


<!-- 全局配置参数 --> 
 
<settings> 
 
<!-- 延迟加载总开关 --> 
 
<setting name="lazyLoadingEnabled" value="true" /> 
 
<!-- 设置按需加载 --> 
 
<setting name="aggressiveLazyLoading" value="false" /> 
 
</settings>

3 Lazy-Loading-Implementierung

3.1 Implementierungsideen

Anforderungen:

Abfragereihenfolge und Benutzerinformationen, Einzelanfrage.

Zuerst werden nur Bestellinformationen abgefragt

Wenn ein Benutzer benötigt wird, wird die getUser()-Methode in der Orders-Klasse aufgerufen, um Lazy Loading durchzuführen und SQL auszugeben zur Datenbank.

3.2 mapper.xml


<!-- 一对一查询延迟加载 
   开始只查询订单,对用户信息进行延迟加载  
   --> 
   <select id="findOrderUserListLazyLoading" resultMap="orderCustomLazyLoading"> 
     SELECT  
     orders.* 
    FROM 
     orders 
   </select>

3.3 resultMap


<!-- 一对一查询延迟加载 的配置 --> 
  <resultMap type="orders" id="orderCustomLazyLoading"> 
    <!-- 完成了订单信息的映射配置 --> 
    <!-- id:订单关联用户查询的唯 一 标识 --> 
    <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" /> 
    <!-- 配置用户信息的延迟加载 select:延迟加载执行的sql所在的statement的id,如果不在同一个namespace需要加namespace  
      sql:根据用户id查询用户信息 column:关联查询的列 property:将关联查询的用户信息设置到Orders的哪个属性 --> 
    <association property="user" 
      select="com.sihai.mybatis.mapper.UserMapper.findUserById" column="user_id"></association> 
 
 
  </resultMap>

3.4 mapper.java


//一对一查询,延迟加载 
  public List<Orders> findOrderUserListLazyLoading() throws Exception;

3.5 Testcode


// 一对一查询延迟加载 
  @Test 
  public void testFindOrderUserListLazyLoading() throws Exception { 
 
    SqlSession sqlSession = sqlSessionFactory.openSession(); 
    // 创建mapper代理对象 
    OrdersMapperCustom ordersMapperCustom = sqlSession 
        .getMapper(OrdersMapperCustom.class); 
 
    // 调用方法 
    List<Orders> list = ordersMapperCustom.findOrderUserListLazyLoading(); 
     
    //这里执行延迟加载,要发出sql 
    User user = list.get(0).getUser(); 
    System.out.println(user); 
     
  }

4 Zusammenfassung von resultType, resultMap, Lazy-Loading-Nutzungsszenarien

4.1 Lazy Loading:

Es gibt viele Möglichkeiten, Lazy Loading zu implementieren. Um die Datenbankabfrageleistung zu verbessern, kann die Abfrage nur einer einzigen Tabelle gerecht werden verwendet und dann die zugehörigen Informationen abgefragt.
mybatis bietet eine Lazy-Loading-Funktion für die Serviceschicht.

4.2 resultType:

Funktion: Ordnen Sie die Abfrageergebnisse dem Pojo entsprechend der Konsistenz des SQL-Spaltennamens und des Pojo-Attributnamens zu.

Anlass: Es ist üblich, einige detaillierte Datensätze anzuzeigen. Wenn alle zugehörigen Abfrageinformationen auf der Seite angezeigt werden, können Sie jeden Datensatz direkt mit resultType dem Pojo zuordnen und die Liste auf dem durchsuchen Frontend-Seite (Liste (in der Mitte ist Pojo).

4.3 resultMap:

Verwenden Sie Zuordnung und Sammlung, um eine erweiterte Eins-zu-eins- und Eins-zu-viele-Zuordnung durchzuführen.

4.4 Assoziation:

Funktion: Assoziationsabfrageinformationen einer Pojo-Klasse zuordnen.

Anlass: Um verwandte Informationen bequem zu erhalten, können Sie mithilfe der Zuordnung verwandte Bestellungen POJO zuordnen, z. B. Abfragen von Bestellungen und zugehörigen Benutzerinformationen.

4.5-Sammlung:

Funktion: Zugehörige Abfrageinformationen einer Listensammlung zuordnen.

Anlass: Um verwandte Informationen bequem abzurufen, können Sie die Sammlung verwenden, um die zugehörigen Informationen der Listensammlung zuzuordnen. Zum Beispiel: Um Module und Funktionen des Benutzerberechtigungsbereichs abzufragen, können Sie die Sammlung verwenden Ordnen Sie die Modul- und Funktionslisten der Liste zu.

【Verwandte Empfehlungen】

1. Besondere Empfehlung: Version „php Programmer Toolbox“ V0.1 herunterladen

2. Kostenloses Java-Video-Tutorial

3. Umfassende Analyse von Java-Annotationen

Das obige ist der detaillierte Inhalt vonWir stellen die Lösung für Mybatis Lazy Loading vor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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