Hibernate学习笔记(三)-集合、级联、继承的使用

2019-07-10  本文已影响0人  G__yuan

1.Hibernate中集合的使用说明

(1).list集合的使用

部门实体:

对应的映射文件:

当实体中使用了list集合时,因为list有排序功能,所以业务不需要排序时,使用的list的如上配置时,就会对性能有所损耗,在hibernate中提供了list的另一个配置标签<bag>,配置这个标签后,则可取消排序功能。<bag>标签必须与list一起使用。配置如下:

员工实体

对应映射文件:

(2).使用Map集合

部门实体

对应的映射文件

2.Hibernate中级联的配置

One-to-many中配置级联:

One-to-One中配置级联:

3.Hibernate中的inverse:

举例解释:

1.当没有使用inverse这个配置属性时,所有的关系维护必须由程序员写程序自己去维护,比如:部门和员工例子来说:

当按照上面的方法保存部门和员工时,没有配置inverse时,程序运行时,告诉部门有哪些员工,也就是对应的depart.setEmSet(emSet),执行,hibernate会发出一个update的sql来更新一下数据库,但是当执行上面的语句,告诉员工自己属于那个部门的时候,对应的语句是:em1.setDepart(depart);hibernate也会发出一个updatesql来更新数据库,这样做的话,会造成多此一举,从而造成浪费。当在one的一方配置inverse=”true”时,one的一方将不会再维护关联关系,当执行depart.setEmSet(emSet)时,hibernate将不会发sql。

可以通过控制台来看hibernate发出的sql语句:

没有配置inverse的情况:

当配置之后one的一方将不在维护关联关系:

Inverse一般配置在one的一方,让多的一方去维护关联关系,inverse的配置如下:

Inverse属性在集合中才可以配置,并且在list中不能配置。

3.继承

1.整个继承树映射到一张表

继承实现之后的数据库表如下图:

这样做的好处是:单表操作,性能上比较有优势。

缺点:数据库表中有好多字段是空的,按严格来说,这样不规范。

Java代码和对应的映射文件:

1>.People类:

2>.Skiller类:

3>.Sales类:

对应的映射文件:

说明一点:配置文件中的鉴别器如果不指定类型的话,默认是String类型,值为类的全名

2.每个类映射到一张表

继承之后在数据库中对应的表如下:

这样做的优点:表中的字段没有空的

缺点:在查询的时候,需要进行关联查询,这样的话,在效率上会有所下降。

Java代码和对应的映射文件:

实体的java代码和上面的一样没有变化;

映射文件有所变化:

3.鉴别器与内连接(单独生成一张表)相结合

对应的数据库中的表:

Java代码和对应的映射文件

Java代码,没有变化;

。。。。。。

映射文件:

4.每个具体类映射一张独立表

说明一下:如果,people是抽象类将不会生成表,在映射文件中配置abstract="true"

生成的数据库表:

Java代码和映射文件:

Java代码没啥变化;

映射文件:

4.懒加载

5.缓存

Session关闭之后,缓存消失。(意思也是,一级缓存只能存在同一个session中)

上一篇 下一篇

猜你喜欢

热点阅读