懒加载:对于页面有很多静态资源的情况下(比如网商购物页面),为了节省用户流量和提高页面性能,可以在用户浏览到当前资源的时候,再对资源进行请求和加载。
fetchType="lazy"
mybatis多对一嵌套查询:
嵌套查询的特点就是:利用一个查询的时候发送多条sql语句;
1+n条sql语句:1条主sql,还有多条分别查询语句:
例如:我想要查询用户的详细信息包括地址,(地址在另一张表,此时表被关系表管理),我就需要嵌套查询:
1.先根据id查询用户信息:
select * from t_user where id =5
2.再根据用户信息查询用户地址的关系表得到地址表中的id:
select address_id aid from t_user_address ua where user_id =5
3.根据关系表地址id拿到地址的详细信息:
select * from t_address where id =1
select * from t_address where id =2
代码原理:
t_address 地址信息表
t_address_user地址id和用户id关系表
t_user用户表
查询的sql和结果:
代码实现:
配置懒加载: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 }