hibernate 总结二

十四: 关联

员工和部门是多对一      在员工表中 持有部门 类属性   depart
private Department depart
员工配置文件  多对一反射能够知道不是简单拿数据   知道depart找到类映射文件  才能把完整

对象映射过来  通过depart_id(表里列名),缺省  去寻找depart表里的id   如果不是映射id 

 再加一个  property-ref="name"
<many-to-one name="depart" column="depart_id"/>
存储进表里的数据列名为depart_id  引用的是对象的id   查询也一样查询得到的是我们的对象,

根据打印出来的sql可以看到,底层也是先插员工,根据员工里的部门id查询得到id

这个注解hibernate帮我们做了什么?  新增的时候,我们往这个字段里塞了一个对象,那么会往

数据库表的列里放入这个对象对应的表的注解列,就形成了外键引用
查询的时候,我们获取员工后,会连带着部门对象整个获取。底层当然还是查询了两个表,先查询

员工表,员工表里信息得到了里面包含一个部门id,再根据部门id查询得到部门的所有信息,映射

的员工表里的部门字段


部门到员工是一对多 
在部门表里  写一个集合
private Set<Employee> emps;
编写hibernate映射文件,只有hibernate能帮助我们完成这种关联  set
//set 告诉他是集合  class 告诉他集合里放的是啥 key 告诉他依赖什么区寻找这个集合,依赖

另一个对这个表的外键,也就是我们上一个写的  <many-to-one name="depart"

column="depart_id"/>列  可以得到一组部门号相同的员工集合
<set name="emps">
 <key cloumn="depart_id"></key>
 <one-to-many class="Employee" />
</set>

穿一个部门id得到员工集合,sql也是跑了两条  ,先查询部门信息  ,查询员工表(根据

depart_id)
save部门的时候给他穿一个员工集合会发生什么呢? 会更新员工的depart_id  为部门id


这个例子也能体现出对象模型和关系模型的不对等性。看我们的对象模型发生了改变,但关系模型

没变


十七 一对一
基于主键的one-to-one (person的映射文件)
Person <one-to-one name="idCard" /> 主
IdCard <one-to-one name="person" />  引用
两个类中他们是相互持有的
情况一:IdCard的id就是person的id  主外键关联
在写IdCard的id配置文件的时候这样写
<class name="IdCard" table="id_card">
 <id name="id">
  <generator class="foreign">
    这里指的是下面配置文件中的person
   <param name="property">person</param>    
  </generator>
 </id>
 <property name="life">life</property>
 <one-to-one name="person" />
</class>
情况二 idCard有自己主键,也是自增长,另外有一列是引用Person的id,和多对一类似,在id—

Card中引用其他表的外键上加上唯一性约束  就变成了一对一
<class name="IdCard" table="id_card">
 <id name="id">
  <generator class="native">
  </generator>
 </id>
 <property name="life">life</property>
 <many-to-one name="person" column="person_id" unique="true" />
</class>
Person配置文件
<one-to-one name="idCard" property-ref="person" />加上property-ref表示去

name="idCard" 中找person,如果id跟我的逐渐一致表示是这个人的卡

hibernate定义集合的时候只能使用接口不能用实现类


二十六:
级联操作   配置两个对象关联的时候都可以配置,例如
 <set name="emps" cascade="delete">....</set>  意思就是我删除部门把员工都删除


cascade   级联   可以设置为  save-update delete all等
看主从对象的关系例如person里的idcard引用就可以设置级联为all
一般多对多不配置级联  普通property没有这个属性的

一对多中一可以放弃维护关系(部门,集合这边出现)  inverse="true"  放弃维护关联关系 

hibernate不允许多的那边放弃关系维护(员工)
二十八

继承  关系模型 一个表有type skill sell 列没有为null
 关系模型  三个类 Employee 父类 Skill  Sales 子类
配置文件这样写
 <discriminator column="type" type="int"/>  鉴别器作用
 <subclass name="Skiller" discriminator-value="1"/>
  <property name="skill" />
 </subclass> 
 <subclass name="Sales" discriminator-value="2"/>
  <property name="sell" />
 </subclass> 
优点:效率高,只操作一张表,
缺点:增加子类要修改表结构,必须设计为可以为null
 
如果子类差别太大,可以选取方式:修改关系模型 将子类单独建张表
优点  表更合理 没有null字段
缺点 效率低
这两种可以结合使用

技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值