1. 程式人生 > >Mybatis進階學習筆記——關係查詢——一對多查詢

Mybatis進階學習筆記——關係查詢——一對多查詢

一個客戶擁有多個訂單

 1     <resultMap type="User" id="UserOrderResultMap">
 2         <id column="id" property="id"/>
 3         <result column="name" property="name"/>
 4         
 5         <!-- 如何體現出User中封裝的訂單呢?需要用到collection標籤 -->
 6         <!-- 
 7             collection:需要封裝的集合
8 property:關聯屬性的名字 9 --> 10 <!-- <collection property="orders" javaType="Order"> --> 11 <!-- opType使用alt+/會自動提示 --> 12 <collection property="orders" ofType="Order"> 13 <id column="order_id" property="id"/> 14 <
result column="orderno" property="orderno"/> 15 <result column="productname" property="productname"/> 16 </collection> 17 18 </resultMap> 19 20 <select id="queryUserOrder" resultMap="UserOrderResultMap"> 21 SELECT u.id,u.name,o.orderno,o.id order_id,o.productname FROM t_user u LEFT JOIN t_order o ON o.user_id=u.id
22 </select>

 

User.java:

 1 package cn.sm1234.domain;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class User {
 7 
 8     private Integer id;
 9     private String name;
10     private String password;
11     
12     private List<Order> orders = new ArrayList<Order>();
13     
14     public Integer getId() {
15         return id;
16     }
17     public void setId(Integer id) {
18         this.id = id;
19     }
20     public String getName() {
21         return name;
22     }
23     public void setName(String name) {
24         this.name = name;
25     }
26     public String getPassword() {
27         return password;
28     }
29     public void setPassword(String password) {
30         this.password = password;
31     }
32     public List<Order> getOrders() {
33         return orders;
34     }
35     public void setOrders(List<Order> orders) {
36         this.orders = orders;
37     }
38     
39     
40 }
 1 package cn.sm1234.dao;
 2 
 3 import java.util.List;
 4 
 5 import cn.sm1234.domain.User;
 6 
 7 public interface UserDao {
 8 
 9     public List<User> queryUserOrder();
10 }
 1     @Test
 2     public void test3() {
 3         SqlSession sqlSession = SessionUtils.getSession();
 4         // getMapper(): 返回指定介面的動態代理的實現類物件
 5         UserDao dao = sqlSession.getMapper(UserDao.class);
 6         List<User> userList = dao.queryUserOrder();
 7         for (User user : userList) {
 8             System.out.println("使用者資訊"+user.getId()+"-"+user.getName());
 9             for(Order order : user.getOrders()){
10                 System.out.println("訂單資訊"+order.getOrderno()+"-"+order.getProductname());
11             }
12         }
13         sqlSession.commit();
14         sqlSession.close();
15     }

資料庫資訊:

測試查詢結果: