此文章为自己书写,在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)删除客户