Hibernate-3.映射(Mapping)

3.1多表关系

表和表之间存在的关系就是主外键关系,而对象和对象之间通常存在以下三种关系:
一对一,一对多,多对多
我们首先一起来看看表之间是怎么建立这三种关系的。
一对一:(一个人对应一个身份证号)
一对多:(一个客户对应多个订单)
多对多:(老师可以带多个班级,一个班可以被多个老师带)

3.2 一对多关联关系映射

重点掌握一对多的单向和双向关联映射,开发中最常用

1.创建具备一对多关系的表(两张表)
2.创建对应的类,并建立联系(两个类)
3.添加两个类的映射文件
4.编写测试程序,测试增删改查的应用及特点
5.分别建立单向和双向的映射关系观察实验结果

3.2.1配置关联关系

    customer         

这里写图片描述

    orderinfo    

这里写图片描述
这里写图片描述

    a)创建对应类

这里写图片描述
这里写图片描述
这里写图片描述

    b)配置映射关系 
        Customer.hbm.xml 

这里写图片描述
这里写图片描述

    OrderInfo.hbm.xml

这里写图片描述

    c)hibernate.cfg.xml引入映射文件

这里写图片描述

    d)应用(CRUD)

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.2.2双向关联inverse

    在上述的案例中,当我们添加一个客户和多个订单时,产生的sql语句如下:

这里写图片描述

    如果说,会发现产生了很多的update语句,这个时候,我们可以做一些优化,将这个关系交给多的一方来维护,注意!!!,代码中也要建立这个联系

这里写图片描述

    此时,重新执行程序

这里写图片描述

    结果就是节省了update语句,注意要设置Phone跟Person的关系,提升了性能。
    所以一对多,一般就是把关系交给多的一方来维护
    关系由多的一方来维护,表现的就是在插入数据的时候直接建立联系,而不需要再逐个去发送更新语句


3.2.3级联操作 save-update

    级联操作主要作用是提高我们的开发效率下面,我们来讲述级联添加,比如我们只保存一个的一方,然后可以级联去保存多的一方。需要在程序建立关联关系。

这里写图片描述
这里写图片描述

测试程序,只需要保存一的一方,就会自动级联去保存关联的Phone对象

这里写图片描述

执行的语句依然是三条
执行的语句的条数是受inverse的影响,而cascade是影响了开发程序,原来需要保存多个,现在保存一个即可。

3.2.4级联操作 delete

    案例:
    我们之前删除一的一方,
    如果这个关系是由一的一方来维护,则会清除掉关联关系,再执行删除
    如果这个关系是由多的一方来维护,则会出现外键约束异常
    所以当我们将关系交给多的一方来维护时,可以设置级联删除

这里写图片描述

    这个时候,SQL如下:

这里写图片描述

    有时候,关系已经交给多的一方来维护,我们要删除的一的一方,但是不想删除多的一方数据,只是去除掉关系,比如一个员工离职了,那他跟其他部门的关系要清除,但是这些部门是不能删除的
    这个时候就是不设置级联删除,那我们该怎么做?
    这个时候,我们需要在程序里面清除一和多的关系!

3.2.5 delete-orphan

    delete-orphan:删除所有和当前对象解除关联关系的对象。
    文件配置

这里写图片描述

    代码设置

这里写图片描述

    执行结果:

这里写图片描述

3.2.6总结

    save-update:一的一方保存,同时保存多的一方

    delete:删除一的一方,同时删除多的一方

    delete-orphan:孤儿删除,解除一和多的关系,同时将多的一方删除,如果需要配置多项,使用逗号分隔。<set cascade="save-update,delete">

    all : save-update 和 delete 整合

    all-delete-orphan : 三个整合

这里写图片描述

3.3多对多关联关系映射

    3.3.1创建表

    teacher      

这里写图片描述

    classes

这里写图片描述

    teacher_classes

这里写图片描述

    3.3.2创建对应类

这里写图片描述
这里写图片描述

    3.3.3配置映射关系

这里写图片描述
这里写图片描述

    3.3.4hibernate.cfg.xml引入映射文件

这里写图片描述

    3.3.5应用(CRUD)

这里写图片描述

        执行的SQL如下:

这里写图片描述

        问题:如果在代码中设置双向关系会怎么样?
        删除:前提是关系是由teacher这一端来维护的

这里写图片描述
这里写图片描述

        修改内容,不会影响关系,所以直接修改即可
        而查询,依然是采用懒加载机制

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值