Mybatis——关联映射查询
一、一对一映射:
主Model:
1 package com.neuedu.model; 2 3 import java.util.Date; 4 5 /** 6 * orders订单表 7 */ 8 public class Order { 9 10 private int id; 11 12 private int userid; 13 14 private String orderId; 15 16 private Date createTime; 17 18 private String note; 19 20 //一对一关系 21 private User user; 22 23 public int getId() { 24 return id; 25 } 26 27 public void setId(int id) { 28 this.id = id; 29 } 30 31 public int getUserid() { 32 return userid; 33 } 34 35 public void setUserid(int userid) { 36 this.userid = userid; 37 } 38 39 public String getOrderId() { 40 return orderId; 41 } 42 43 public void setOrderId(String orderId) { 44 this.orderId = orderId; 45 } 46 47 public Date getCreateTime() { 48 return createTime; 49 } 50 51 public void setCreateTime(Date createTime) { 52 this.createTime = createTime; 53 } 54 55 public String getNote() { 56 return note; 57 } 58 59 public void setNote(String note) { 60 this.note = note; 61 } 62 63 public User getUser() { 64 return user; 65 } 66 67 public void setUser(User user) { 68 this.user = user; 69 } 70 71 @Override 72 public String toString() { 73 return "Order [id=" + id + ", userid=" + userid + ", orderId=" + orderId + ", createTime=" + createTime 74 + ", note=" + note + ", user=" + user + "]"; 75 } 76 77 }
方式一:通过自定义类实现
(1)Model包中,新建一个类使之继承主查询表Model,添加新对应表Model中的属性
1 package com.neuedu.model; 2 /** 3 * 自定义 4 */ 5 public class OrderCustomer extends Order{ 6 7 private int userid; 8 9 private String username; 10 11 private String address; 12 13 public int getUserid() { 14 return userid; 15 } 16 17 public void setUserid(int userid) { 18 this.userid = userid; 19 } 20 21 public String getUsername() { 22 return username; 23 } 24 25 public void setUsername(String username) { 26 this.username = username; 27 } 28 29 public String getAddress() { 30 return address; 31 } 32 33 public void setAddress(String address) { 34 this.address = address; 35 } 36 37 @Override 38 public String toString() { 39 return "OrderCustomer [userid=" + userid + ", username=" + username + ", address=" + address + ", getId()=" 40 + getId() + ", getOrderId()=" + getOrderId() + ", getCreateTime()=" + getCreateTime() + ", getNote()=" 41 + getNote() + "]"; 42 } 43 44 }
(2)mapper.xml中,通过ResultType指向新建的类,进行注入
1 <!-- 一对一查询,需多自定义一个类OrderCustomer --> 2 <select id="selectOrder" resultType="com.neuedu.model.OrderCustomer"> 3 select 4 o.id, o.userid, o.orderid, o.createtime, o.note, 5 t.id userid,t.username,t.birthday,t.address 6 from orders o,t_user t 7 where o.userid = t.id 8 </select>
方式二:通过ResultMap方式注入
(1)在mapper.xml中建立ResultMap映射,运用association标签添加一对一关系映射
1 <!-- 一对一查询,返回resultMap --> 2 <resultMap id="selectOrderResultMap" type="com.neuedu.model.Order" > 3 <id property="id" column="id"/> <!-- property pojo对象的属性名称 column查询语句的列名称--> 4 <result property="userid" column="userid"/> 5 <result property="orderId" column="orderid"/> 6 <result property="createTime" column="createtime"/> 7 <result property="note" column="note"/> 8 <!-- 一对一 关系--> 9 <association property="user" javaType="com.neuedu.model.User"> 10 <id property="id" column="userid"/> 11 <result property="username" column="username"/> 12 <result property="birthday" column="birthday"/> 13 <result property="address" column="address"/> 14 </association> 15 </resultMap>
(2)在mapper.xml中编写查询语句,使ResultMap属性指向前面定义的ResultMap的id
1 <select id="selectOrderByResultMap" resultMap="selectOrderResultMap"> 2 select 3 o.id, o.userid, o.orderid, o.createtime, o.note, 4 t.id userid,t.username,t.birthday,t.address 5 from orders o,t_user t 6 where o.userid = t.id 7 </select>
二、一对多查询:
主Model中添加属性
1 //一对多关系 2 private List<OrderDetail> orderDetailList;
(一个订单对应多个商品明细)
(1)通过属性collection添加一对多映射
1 <!-- 一对多关系:collection --> 2 <collection property="orderDetailList" ofType="com.neuedu.model.OrderDetail"> 3 <id property="id" column="odid"/> 4 <result property="ordersid" column="ordersid"/> 5 <result property="itemsid" column="itemsid"/> 6 <result property="itemsnum" column="itemsnum"/> 7 </collection>
注意:resultMap标签中的extends可指定继承resultMap的标签,可使用其中的所有映射关系,并添加自己独自的