MyBatis 多对多关联

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值