hibernate学习笔记第三天(1)

来源:互联网 发布:mac baren烟丝购买 编辑:程序博客网 时间:2024/06/04 08:30

此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。

若是想看具体第三天的代码可点击此处。

表与表之间的关系回顾

1.一对多
(1)分类和商品关系,一个分类里可以有多个商品,一个商品只能属于一个分类
(2)客户和联系人关系是一对多关系
客户:与公司有业务往来的,百度、新浪、360
联系人:公司里面的员工,百度里有很多员工,联系员工
公司和公司员工的关系
客户是一,联系人是多
一个客户里面可以有多个联系人,一个联系人只能属于一个客户
(3)一对多建表:通过外键建立关系
这里写图片描述

2.多对多
(1)订单与商品关系,一个订单可以有多个商品,一个商品也可以属于多个订单
(2)用户和角色是多对多到的关系
用户:小王、小马、小宋
角色:总经理、秘书、司机、保安
比如小王:可以是总经理,也可以是司机
比如小宋:可以是司机,可以是秘书,也可以是保安
比如小马:可以是秘书,可以是总经理
一个用户里可以有多个角色,一个角色也可以有多个用户
(3)多对多建表:创建第三张表来维护关系
这里写图片描述
3.一对一
(1)在中国,一个男人只有一个妻子,一个女人只有一个丈夫

Hibernate的一对多操作(重点)

一对多的映射配置

以客户和联系人为例:客户是一,联系人是多
第一步:创建实体类,客户和联系人
第二步:让两个实体类之间互相表示
(1)在客户实体类中表示多个联系人
一个客户中有多个联系人
这里写图片描述
(2)在联系人实体类中表示所属客户
一个联系人只属于一个客户
这里写图片描述
第三步:配置映射关系
(1)一般一个类对应一个映射文件
(2)把映射的基本配置完成
这里写图片描述
(3)在映射文件中,配置一对多的关系
在客户映射文件中,表示所属的联系人
这里写图片描述
在联系人映射文件中,表示所属的客户
这里写图片描述
第四步:创建核心配置文件,把文件映射到核心配置文件
这里写图片描述
第五步:运行工具类HibernateUtils创建表结构
这里写图片描述
这里写图片描述

一对多的级联操作

一对多级联保存
(1)添加一个客户,为这个客户添加多个联系人
示例代码1(较麻烦):
public void testAddDemo1(){
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();

        //添加一个客户,为这个客户添加一个联系人        //1.创建客户与联系人的对象        Customer customer = new Customer("传智播客", "vip", "网络", "112", "999");        LinkMan linkMan = new LinkMan("lucy", "男", "119");        //2.在客户中表示联系人,在联系人中表示客户        //建立客户与联系人之间的关系        //2.1把联系人对象放到客户对象的set集合里        customer.getLinkmans().add(linkMan);        //2.2把客户对象放到联系人对象中        linkMan.setCustomer(customer);        //3保存到数据库中        session.save(customer);        session.save(linkMan);        transaction.commit();               }catch(Exception e){        e.printStackTrace();        transaction.rollback();    }finally{        session.close();        sessionFactory.close();    }}

代码演示:
这里写图片描述
这里写图片描述
示例代码2(较简单的):
一般根据客户添加联系人
第一步:在客户映射文件中进行配置
在客户的映射文件的set标签上配置
这里写图片描述
第二步:创建客户与联系人的对象,只需要把联系人放到客户里就行了(多放到一中)
这里写图片描述
一对多级联删除
1.删除一个客户,属于这个客户的联系人也一块删除
2.具体实现
第一步:在客户的映射文件中set标签,进行配置
(1)使用属性cascade属性值delete,若有存在的其他值,则用“,”隔开
这里写图片描述
第二步:在代码中直接删除客户
(1)现根据id查询出对象,调用session的delete方法删除
测试代码:
这里写图片描述
执行过程:
(1)根据id查询客户
这里写图片描述
(2)根据外键的id值查询联系人
这里写图片描述
(3)设置联系人的外键的值为null
这里写图片描述
(4)删除联系人
这里写图片描述
(5)删除客户
这里写图片描述

1 0