1. 程式人生 > >MyBatis學習筆記(三)——輸入(parameterType)與輸出(resultType、resultMap)對映

MyBatis學習筆記(三)——輸入(parameterType)與輸出(resultType、resultMap)對映

一、輸入對映 parameterType

在MyBatis中,我們通過parameterType屬性完成輸入型別對映。這個屬性可接收普通型別也可以接收一個pojo物件。那麼如果我們想要通過這個屬性對映兩個或多個pojo物件時應該怎麼做呢? 這個時候我們就可以運用包裝類來解決這一問題。

1.先在資料庫中建一個表(order_detail):

2.建立order_detail的實體類(OrderDetail.java):

package domain;

public class OrderDetail {
	private Integer id;
	private Integer order_id;
	private Integer item_id;
	private Integer item_num;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getOrder_id() {
		return order_id;
	}
	public void setOrder_id(Integer order_id) {
		this.order_id = order_id;
	}
	public Integer getItem_id() {
		return item_id;
	}
	public void setItem_id(Integer item_id) {
		this.item_id = item_id;
	}
	public Integer getItem_num() {
		return item_num;
	}
	public void setItem_num(Integer item_num) {
		this.item_num = item_num;
	}

}

3.建立包裝類(OrderQueryVo.java):

package domain;

public class OrderQueryVo{
	private Order order;
	private OrderDetail orderDetail;

	public Order getOrder() {
		return order;
	}
	public void setOrder(Order order) {
		this.order = order;
	}
	public OrderDetail getOrderDetail() {
		return orderDetail;
	}
	public void setOrderDetail(OrderDetail orderDetail) {
		this.orderDetail = orderDetail;
	}

}

4.在OrderMapper.xml中新增如下配置資訊:

5.在OrderMapper.java中新增對應方法:

二、輸出對映

輸出對映有resultType和resultMap,他們都是指定輸出結果的型別(pojo、簡單型別、hashmap…),並將sql查詢結果對映為java物件

2.1 resultType

使用resultType時我們應該注意:sql查詢的列名要和resultType指定pojo的屬性名相同,指定相同屬性方可對映成功,如果sql查詢的列名要和resultType指定pojo的屬性名全部不相同(或是部分不相同),則對映到pojo物件中的對應屬性為null。例如有時候我們不需要查詢select * from user where id = ?

而是select username,address _address where id = ? 此時我們給查詢的address列名給了一個別名_address,這樣我們通過查詢表中address的資料然後在將它對映到User物件時,該物件的address屬性就為null,即沒將從表中查詢到的address資料對映到user物件的address屬性中。

此時resultMap就出現了。如果sql查詢列名和最終要對映的pojo的屬性名不一致,使用resultMap就可以將列名和pojo的屬性名做一個對應關係 (列名和屬性名對映配置)。

2.2 resultMap

2.2.1 使用resultMap解決sql查詢列名和最終要對映的pojo的屬性名不一致情況

使用resultMap需要在UserMapper.xml中進行配置:

然後在UserMapper.xml中使用它:

2.2.2 使用resultMap對映包裝類

用<association></association>標籤去關聯包裝類中的型別

在UserMapper.xml中進行配置:

2.2.3 當類中有集合屬性時,也可用resultMap輸出對映集合屬性:

用<collection></collection>標籤去關聯包裝類中的集合屬性

重新編寫一下包裝類:

package domain;

import java.util.List;

public class OrderQueryVo{
	private Order order;
	private List<OrderDetail> orderDetailList;//集合屬性
	
	public Order getOrder() {
		return order;
	}
	public void setOrder(Order order) {
		this.order = order;
	}
	public List<OrderDetail> getOrderDetail() {
		return  orderDetailList;
	}
	public void setOrderDetail(List<OrderDetail> orderDetailList) {
		this.orderDetailList = orderDetailList;
	}

}

在UserMapper.xml中進行配置: