MyBatis 多对多关联
学会了 一对多 一对一,我们可以联想一对多和多对多是不是一样的,其实只是有一点不同的,需要中间表和两边都有List对方的属性,下面我们以代码演示:
1.数据库需要建立三张表,其中一张表是中间表
表为:Group表,Person表,Group_Person表(中间表)
然后简历实体类
代码演示:
package com.bdqn.entity;
/**
*Group表
**/
import java.io.Serializable;
import java.util.List;
public class Group implements Serializable{
private String gid;
private String gname;
private List<Person> persons;
public String getGid() {
return gid;
}
public void setGid(String gid) {
this.gid = gid;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
@Override
public String toString() {
return "Group [gid=" + gid + ", gname=" + gname + ", persons="
+ persons + "]";
}
}
package com.bdqn.entity;
/**
*Person 表
**/
import java.util.List;
public class Person {
private String pid;
private String pname;
private List<Group> groups;
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public List<Group> getGroups() {
return groups;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
@Override
public String toString() {
return "Person [pid=" + pid + ", pname=" + pname + ", groups=" + groups
+ "]";
}
}
GroupMapper.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bdqn.dao.GroupDao">
<resultMap type="Group" id="getGroup">
<id property="gid" column="gid" />
<result property="gname" column="gname" />
</resultMap>
<resultMap type="Group" id="getGroupMap" extends="getGroup">
<collection property="persons" ofType="Person" resultMap="com.bdqn.dao.PersonDao.getPerson"/>
</resultMap>
<select id="groups" resultMap="getGroupMap">
select *from `group` as g
left join group_person as gp on g.gid=gp.gid
left join person as p on gp.pid=p.pid
</select>
</mapper>
PersonMapper.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bdqn.dao.PersonDao">
<resultMap type="Person" id="getPerson">
<id property="pid" column="pid"/>
<result property="pname" column="pname"/>
</resultMap>
<resultMap type="Person" id="getPersonMap" extends="getPerson">
<collection property="groups" ofType="Group" resultMap="com.bdqn.dao.PersonDao.getPerson"/>
</resultMap>
<select id="persons" resultMap="getPersonMap">
SELECT *FROM person AS p
LEFT JOIN group_person AS gp ON p.pid=gp.pid
LEFT JOIN `group` AS g ON gp.gid=g.gid
</select>
</mapper>