懒加载:对于页面有很多静态资源的情况下(比如网商购物页面),为了节省用户流量和提高页面性能,可以在用户浏览到当前资源的时候,再对资源进行请求和加载。

      fetchType="lazy" 

 

 mybatis多对一嵌套查询:

嵌套查询的特点就是:利用一个查询的时候发送多条sql语句;
1+n条sql语句:1条主sql,还有多条分别查询语句:

 

 例如:我想要查询用户的详细信息包括地址,(地址在另一张表,此时表被关系表管理),我就需要嵌套查询:

1.先根据id查询用户信息:

select * from t_user where id =5

mybatis 嵌套查询与懒加载

 

2.再根据用户信息查询用户地址的关系表得到地址表中的id:

select address_id aid from t_user_address ua where user_id =5

mybatis 嵌套查询与懒加载

3.根据关系表地址id拿到地址的详细信息:

select * from t_address where id =1
select * from t_address where id =2

mybatis 嵌套查询与懒加载

mybatis 嵌套查询与懒加载

 

代码原理:

 

mybatis 嵌套查询与懒加载

 

 t_address 地址信息表

 mybatis 嵌套查询与懒加载

 t_address_user地址id和用户id关系表

mybatis 嵌套查询与懒加载

 t_user用户表

 mybatis 嵌套查询与懒加载

 查询的sql和结果:

mybatis 嵌套查询与懒加载

 

 代码实现:

 

配置懒加载:mybatis-config.xml

 <settings>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

 

编写sql:UserDAO.xm 1 <resultMap id="mynesting" type="user">

 

 1 <resultMap id="mynesting" type="user">
 2         <id property="id" column="id"></id>
 3         <result property="name" column="name"></result>
 4         <result property="sal" column="sal"></result>
 5         <result property="birth" column="birthday"></result>
 6         <collection fetchType="lazy" property="addresses" ofType="Address" column="id" javaType="ArrayList"  select="selectAddressId">
 7         </collection>
 8     </resultMap>
 9 
10     <resultMap id="myua" type="ua">
11         <id property="addressId" column="aid"></id>
12         <collection fetchType="lazy" property="addresses" ofType="Address" column="aid" javaType="ArrayList"  select="selectAddress">
13         </collection>
14     </resultMap>
15 
16     <select id="ById" resultMap="mynesting">
17       select * from t_user where id =#{id}
18     </select>
19 
20     <select id="selectAddressId" resultMap="myua" >
21         select address_id aid from t_user_address ua where user_id =#{id}
22     </select>
23 
24     <select id="selectAddress" resultType="address">
25       select * from t_address where id =#{id}
26     </select>

 

 

 

 

 UserDAO:

 1 package com.etc.dao;
 2 
 3 import com.etc.entity.User;
 4 
 5 import java.util.List;
 6 
 7 public interface UserDao {
 8  
 9     List<User> ById(int id);
10 
11 
12 }

 

UA.java:

 1 package com.etc.entity;
 2 
 3 import java.util.List;
 4 
 5 public class UA {
 6     private int userId;
 7     private int addressId;
 8     private List<Address> addresses;
 9 
10     public List<Address> getAddresses() {
11         return addresses;
12     }
13 
14     public void setAddresses(List<Address> addresses) {
15         this.addresses = addresses;
16     }
17 
18     public int getUserId() {
19         return userId;
20     }
21 
22     public void setUserId(int userId) {
23         this.userId = userId;
24     }
25 
26     public int getAddressId() {
27         return addressId;
28     }
29 
30     public void setAddressId(int addressId) {
31         this.addressId = addressId;
32     }
33 
34     @Override
35     public String toString() {
36         return ""+addresses;
37     }
38 }
UA.java

相关文章:

  • 2022-12-23
  • 2022-03-04
  • 2022-12-23
  • 2021-10-01
  • 2021-07-01
  • 2021-12-22
猜你喜欢
  • 2022-01-08
  • 2021-07-09
  • 2021-06-15
  • 2021-12-19
  • 2021-08-29
  • 2021-11-20
相关资源
相似解决方案