您的位置:首页 > 数据库

数据库中表与表之间建立关系(一对多、多对多)

2017-02-07 10:10 190 查看

一、一对多的关系

例:公司与员工的关系,公司为一,公司员工为多,需要在多方建立外键指向一方的主键。

一对多让两个实体类之间相互表示

(1)一个公司里面有多个员工。

private Set<yuangong> yuangongSet=new HashSet<yuangong>();
public Set<yuangong> getYuangongSet()
{
return yuangongSet;
}
public void setYuangongSet(Set<yuangong> yuangongSet)
{
this.yuangongSet=yuangongSet;
}

(2)一个员工只能属于一个公司

private Gongsi gongsi;
public Gongsi getGongsi()
{
return gongsi;
}
public void setGongsi(Gongsi gongsi)
{
this.gongsi=gongsi;
}

配置一对多的映射关系,在映射文件中配置

(1)在公司映射文件中,表示所有员工

需要使用set标签表示所有员工
set标签的name属性需要写上在公司实体类里面表示员工的set集合名称,set标签里面还要包含一个key标签,key标签的column属性需要写实体类的外键属性名称。
在key标签的下面还需一个one-to-many标签,标签里面的class属性写员工实体类的全路径

(2)在员工映射文件中,表示所属公司

需要在一干涉文件中添加many-to-one标签,标签的name属性需要写上员工实体类里面表示公司的对象名称,标签的class属性需要写上公司类的全路径,标签的column属性需要写上外键属性名称

创建核心配置文件,把映射文件引入到核心配置文件中

<mapping resource="实体类配置文件路径"></mapping>

二、多对多的关系

例:商品与订单的关系,一个商品可以属于多个订单,一个订单可以有多种商品。
        用户和角色的关系,一个角色可以包括多个用户,一个用户可以是多个角色。

创建一张用户表和一张角色表,还需创建一张关系表,关系表至少有两个外键,分别指向两张表的主键。

1、与一对多类似,先是创建实体类,然后让两个实体类互相表示。

(1)以订单和商品为例
一个订单可以有多种商品,使用set集合表示
//一个订单可以有多种商品

    private Set<ShangpinEntity> shangpinEntitySet=new HashSet<ShangpinEntity>();

    public Set<ShangpinEntity> getShangpinEntitySet() {

        return shangpinEntitySet;

    }

    public void setShangpinEntitySet(Set<ShangpinEntity> shangpinEntitySet) {

        this.shangpinEntitySet = shangpinEntitySet;

    }

一种商品可以属于多个订单,使用set集合表示
    //一种商品可以属于多个订单

    private Set<DingdanEntity> dingdanEntitySet=new HashSet<DingdanEntity>();

    public Set<DingdanEntity> getDingdanEntitySet() {

        return dingdanEntitySet;

    }

    public void setDingdanEntitySet(Set<DingdanEntity> dingdanEntitySet) {

        this.dingdanEntitySet = dingdanEntitySet;

    }

2、配置映射关系

(1)基本配置略
(2)配置多对多关系
都是使用set标签来表示彼此
在订单配置文件中配置如下标签
<!--name="对应实体类中set集合的名称" table="第三张表名(关系表)"-->

        <set name="shangpinEntitySet" table="dingdan_shangpin">

            <!--column="当前映射文件在关系表中外键名称(也就是表当前主键)"-->

            <key column="did"></key>

            <!--class="商品表的实体类全路径" column="商品表在关系表中的外键名称(也就是商品表的主键)"-->

            <many-to-many class="domain.ShangpinEntity" column="sid"></many-to-many>

        </set>

在商品配置文件中配置如下标签
<!--name="对应实体类中set集合的名称" table="第三张表名(关系表)"-->

        <set name="dingdanEntitySet" table="dingdan_shangpin">

            <!--column="当前映射文件在关系表中外键名称(也就是表当前主键)"-->

            <key column="sid"></key>

            <!--class="订单表的实体类全路径" column="订单表在关系表中的外键名称(也就是订单表的主键)"-->

            <many-to-many class="domain.DingdanEntity" column="did"></many-to-many>

        </set>

3、在核心配置文件中引入映射文件
        <mapping resource="domain/DingdaEntity.hbm.xml"/>

        <mapping resource="domain/ShangpinEntity.hbm.xml"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐