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
(1) Nur Bestellinformationen abfragen
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>
<select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{value}</select>
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>
//查询订单关联查询用户,用户信息时延迟加载public List<Orders> findOrdersUserLazyLoading() throws Exception;
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:
Einstellungselement |
Beschreibung |
Zulässige Werte |
Standardwert |
||||||||||||
lazyLoadingEnabled | Lazy Loading global festlegen. Wenn auf „false“ gesetzt, werden zunächst alle zugehörigen geladen. |
true |. false
|
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 |
@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(); }
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!