Mybatis系列之集合映射
上篇文章我们讲了关联映射,实现了销售与登录用户之间的关联。本文我们接着来讲一讲集合映射,实现销售与客户的多对多关系。
实现销售与客户多对多关系
本文中仍延用《Mybatis系列之关联映射》中的映射接口和测试用例,这里仅对增加和修改的内容进行讲解。
第一步,在动手编写映射文件之前,我们需要对Sales类增加一个List属性,用以保存销售员对应的客户列表。
/**
*
*/
private List<Customer> customers;
public Sales() {
super();
this.setCustomers(new ArrayList<Customer>());
}
public List<Customer> getCustomers() {
return customers;
}
protected void setCustomers(List<Customer> customers) {
this.customers = customers;
}
同时增加一个客户类。
package com.emerson.learning.pojo;
import java.sql.Timestamp;
public class Customer {
/**
*
*/
private int customerId;
/**
*
*/
private String customerName;
/**
*
*/
private int isValid;
/**
*
*/
private Timestamp createdTime;
/**
*
*/
private Timestamp updateTime;
/**
*
*/
private User userInfo;
@Override
public String toString() {
return "Customer [customerId=" + customerId + ", customerName=" + customerName + ", isValid=" + isValid
+ ", createdTime=" + createdTime + ", updateTime=" + updateTime + ", userInfo=" + userInfo + "]";
}
public int getCustomerId() {
return customerId;
}
public void setCustomerId(int customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public int getIsValid() {
return isValid;
}
public void setIsValid(int isValid) {
this.isValid = isValid;
}
public Timestamp getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Timestamp createdTime) {
this.createdTime = createdTime;
}
public Timestamp getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Timestamp updateTime) {
this.updateTime = updateTime;
}
public User getUserInfo() {
return userInfo;
}
public void setUserInfo(User userInfo) {
this.userInfo = userInfo;
}
}
第二步,修改映射文件。我们先使用嵌套查询方式来实现为销售加载客户列表。首先在resultMap中增加客户集合映射的定义。
嵌套查询
<!-- 定义一对多集合信息(每个销售人员对应多个客户) --> <collection property="customers" javaType="ArrayList" column="sales_id" ofType="Customer" select="getCustomerForSales" />
集合映射的定义与关联映射定义很相似,除了关键字不同外,还多了两个属性JavaType和ofType。
property用于指定在Java实体类是保存集合关系的属性名称
JavaType用于指定在Java实体类中使用什么类型来保存集合数据,多数情况下这个属性可以省略的。