概述 MyBatis中的一對多、多對一和多對多,主要就是resultMap中:java
association:一個複雜的類型關聯。許多結果將包成這種類型(一對多) collection:複雜類型的集合(多對一) 這2個屬性的使用,而一對多和多對一都是相互的,只是站的角度不一樣。 實例:數據庫
這個實例只說這2個屬性的使用方法。app
首先是數據庫,以員工管理系統的數據庫爲例。ide
實體類:this
這裏只列要實現映射功能用到的類user、role、department。xml
department和user,是一對多關係,一個部門能夠擁有多個員工。ci
role和user是多對多關係,一個角色可能有多個員工,而一個員工也可能有多個角色。而要實現多對多,在程序中則是拆分紅兩個一對多,詳情見下面的實體類註釋。get
1)User.javaio
public class User {class
private int user_id;
private String user_name;
private String user_gender;
private String user_email;
private String user_phone;
private String user_address;
private Date user_birthday;
private int department_id;
//一對多,一個用戶可能有多個角色。
private List roles;
//多對一,一個部門多個員工
private Department department;
public User() {
super();
}
public User(String user_name, String user_gender,
String user_email, String user_phone, String user_address,
Date user_birthday, int department_id) {
super();
this.user_name = user_name;
this.user_gender = user_gender;
this.user_email = user_email;
this.user_phone = user_phone;
this.user_address = user_address;
this.user_birthday = user_birthday;
this.department_id = department_id;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_gender() {
return user_gender;
}
public void setUser_gender(String user_gender) {
this.user_gender = user_gender;
}
public String getUser_email() {
return user_email;
}
public void setUser_email(String user_email) {
this.user_email = user_email;
}
public String getUser_phone() {
return user_phone;
}
public void setUser_phone(String user_phone) {
this.user_phone = user_phone;
}
public String getUser_address() {
return user_address;
}
public void setUser_address(String user_address) {
this.user_address = user_address;
}
public Date getUser_birthday() {
return user_birthday;
}
public void setUser_birthday(Date user_birthday) {
this.user_birthday = user_birthday;
} public int getDepartment_id() {
return department_id;
}
public void setDepartment_id(int department_id) {
this.department_id = department_id;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public List getRoles() {
return roles;
}
public void setRoles(List roles) {
this.roles = roles;
} @Override
public String toString() {
return "User [user_id=" + user_id + ", user_name=" + user_name
", user_gender=" + user_gender + ", user_email=" + user_email
", user_phone=" + user_phone + ", user_address="
user_address + ", user_birthday=" + user_birthday
", department_id=" + department_id + ", roles=" + roles
", department=" + department + "]\n"; }
}
2)Role.java
public class Role {
private int role_id;
private String role_name;
//一對多,1個角色也可能被多個用戶擁有,因此是list
private List users;
public Role() {
}
public Role(int role_id, String role_name) {
super();
this.role_id = role_id;
this.role_name = role_name;
} public int getRole_id() {
return role_id; } public void setRole_id(int role_id) {
this.role_id = role_id;
} public String getRole_name() {
return role_name; } public void setRole_name(String role_name) {
this.role_name = role_name; } public List getUsers() {
return users; } public void setUsers(List users) {
this.users = users; } @Override public String toString() {
return "Role [role_id=" + role_id + ", role_name=" + role_name
3)Department.java
public class Department {
private int department_id;
private String department_name;
//1對多,1個部門多個用戶
private List users;
public Department() {
super(); } public Department(int department_id, String department_name,
List users) {
super();
this.department_id = department_id;
this.department_name = department_name;
this.users = users;
} public int getDepartment_id() {
return department_id; } public void setDepartment_id(int department_id) {
this.department_id = department_id; } public String getDepartment_name() {
return department_name; } public void setDepartment_name(String department_name) {
this.department_name = department_name; } public List getUsers() {
return users; } public void setUsers(List users) {
this.users = users; } @Override
public String toString() {
return "Department [department_id=" + department_id
", department_name=" + department_name + ", users=" + users
"]"+"\n"; } } 3.實體類的mapper文件
1)UserDepartmentMapper.xml:多對一,多個user對應一個department,使用association
2)UserMapper.xml:一對多,使用collection,一個user對應多個role,同時也是多對多中user這一方的一對多。若是要實現多對多,還須要完成一個role對應多個user,即完成兩個一對多,寫法同下。 無論是一對多、多對一,仍是多對多,只須要知道這2個屬性哪一個表明多哪一個表明一,就能夠很好的在實體的mapper文件中配置出來。