hbibernate知识总结

hibernate概述

ORM-对象-关系映射-Object Relational Mapping
hibernate位于持久层,是对JDBC API的轻量级封装

hibernate使用

== 1.编写Hibernate配置文件;
创建Java持久化类XXX.java;
编写持久化类的映射配置文件XXX.hbm.xml;
使用Hibernate API 完成对象的持久化==

Hibernate配置文件两种方式
hibernate.properties (键=值方式)
默认名字为:hibernate.propeties
hibernate.cfg.xml

知识点回顾
数据库中用主键来标识唯一性记录。
主键必须满足的条件:
不允许null;
每条记录必须有唯一的主键值,主键值不能重复;
每条记录的主键值不能改变。
主键分类:
业务(自然)主键:具有实际意义;
代理主键:没有实际意义。
“==” 比较两个变量引用的内存地址是否相同;
equals 比较两个变量引用的对象的值是否相同。

Hibernate 采用对象标识符(OID)区分对象

Object Identifier-OID
三种类型:Short Long Integer

标识符生成器:increment递增 identity自增 assigned

一对多关系映射

单向一对多关联:用set元素配置
set元素的子元素: key元素 one -to-many

双向一对多:many-to-one

一对一关系映射

Hibernate提供两种映射一对一关联关系的方式:
主键关联映射
主键关联映射 – 主键表(USER)
通过one-to-one元素配置
cascade属性(级联属性)为 all
User.hbm.xml
主键关联映射 – 外键表(PERSON )
通过one-to-one元素配置
constrained 属性为 true,表明 PERSON 表 ID 为外键,参照主表(USER)。
外键表实体类配置文件中 OID 使用 foreign 生成策略
Person.hbm.xml

唯一外键关联映射。(外键必须设定 unique 约束)
唯一外键关联映射 - 主键表(PERSON)
通过one-to-one 元素配置
property-ref 属性,表明建立了从User到Person的一对一关联关系
唯一外键关联映射 - 外键表(USER)
通过many-to-one元素配置
column 属性指明外键列;
unique 属性设置为 true,表明唯一约束;
cascade 属性设置为 all,表明删除 USER 时同时删除 PERSON

多对多关系映射

set元素属性
name属性:指定类的属性名;
table属性:指定多对多关联关系中间表;
cascade级联操作属性:save-update、delete、all、none。
set子元素:
key元素:设定实体类对应表的外键;
many-to-many元素中class属性:设定关联类型

inverse 是 Hibernate 中双向关联关系中的基本概念,用来设置关系由哪一方来维护。
inverse=true 表示被控方,=false 表示主控方;
在多对多关系中需要设置哪一方为被控方,即设置inverse=true

hibernate生命周期

实体对象的4种状态
Transient(临时状态) : 刚刚被 new 关键字创建,还没有被持久化,不在Session的缓存中。
Persistent(持久化状态) : 已经被持久化,并加入到 Session 缓存中。
Detached(游离状态) : 已经被持久化,但不再处于 Session 缓存中。
Removed(删除状态) : Session 已经计划将其从数据库删除,并且不再处于 Session 缓存中。

临时对象(Transient Objects)-处于临时状态的对象称为临时对象,在数据库中不存在与之相对应的记录.
持久化对象(Persist Objects)-处于持久化状态的对象称为持久化对象,在数据库中存在与之相对应的记录.
游离对象(Detached Objects)-处在游离状态的对象称为游离对象,在数据库中可能存在与之相对应的记录(前提是没有其他Session实例删除该记录)
被删除对象(Removed Objects)-处在删除状态的对象称为被删除对象,数据库中存在与之对应的记录(已经计划从数据库中删除)

Session的save()方法
在这里插入图片描述
Session的update()方法
在这里插入图片描述
Session的delete()方法
在这里插入图片描述
Session的load()和get()方法
load() 与 get() 方法都是根据 OID 加载持久化对象。
load() 与 get() 方法的不同点:
如果数据库中不存在与 OID 对应的记录:
load() 会抛出 ObjectNotFoundException 异常;
get() 会返回 null。
默认加载策略:
load() 使用类的延迟加载策略;
get() 使用类的立即加载策略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值