ORM 模式

ORM ,即Object-Relation Mapping 

该技术是使面向对象的类和面向关系的数据库表相互绑定在一起。


域模型(面向对象)<----------------(ORM,对象关系映射)-------------->数据模型(面向过程)



关联关系

1. 单向关联;

1.1 单对单1:1      one to one

1.2 单对多1:M      one to many

1.3 多对单M:1      many to one

1.4 多对多M:N     many to many


2. 双向关联

2.1  一对多one to many && 多对一many to one 

2.2 双向一对一 one to one

2.3 双向多对多many to many


依赖关系


聚集关系

聚集指的是整体和部分之间的关系,在实体域对象之间很常见。


面向对象概念

1. 类

2. 对象

3. 属性


面向关系概念

1. 表

2. 表的行(即记录)

3. 表的列(即字段)




Session 管理及持久化类

Persistence 持久

Hibernate 的Session是和数据库建立连接,实际上和JDBC的Contection作用类似。SessionFactory实际上是和数据库的连接池作用类似。

Hibernate是Java应用和关系数据库之间的桥梁,它负责Java对象和关系数据之间的映射。

Hibernate内部封装了JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。


在Java应用中使用Hibernate包含以下步骤:

1. 创建Hibernate的配置文件

2. 创建持久化类

3. 创建对象-关系映射文件

4. 通过Hibernate API编写访问数据库的代码


在Hibernate中持久化类的对象可以划分为三种状态,分别为瞬态,持久态,托管态。

1, 瞬态(Transient) 也叫临时态,处于这种状态的对象具备的特征如下:

a. 不在Session的缓存中,不与任何的Session实例相关联。

b. 在数据库中没有与之对应的记录。

2. 持久态(Persistent), 处于该状态的对象具备如下特征:

a. 在Session的缓存中,与Session实例相关联。

b. 在数据库中存在与之对应的记录。

3. 托管态(Detached) ,  处于该状态的对象具备如下特征:

a. 不在Session的缓存中,不与任何的Session实例相关联。

b. 在数据库中存在与之对应的记录。(前提条件是)



 

Hibernate事务和数据操作

事务就是指作为单个逻辑工作单元执行的一组数据操作,这些操作要么必须全部成功,要不必须弯曲失败,以保证数据的一致性和完整性。

事务具有ACID属性:

Atomic原子性:原子性确保事务中的所有操作要么都发生,要么都不发生。

Consistent一致性:一旦一个事务结束了(无论成功与否),系统所处的状态和它的业务规则是一致的。即数据应当不会被破坏。

Isolated隔离性:事务应该允许多个用户操作同一个数据,一个用户的操作不会其它用户的操作相混淆。

Durable持久性:一旦事务完成,事务的结果应该持久化。

 

事务的ACID属性是由关系数据库管理系统RDBMS来实现的。

数据库管理系统采用日志来保证事务的原子性,一致性和持久性。

日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已有的更新,从而使数据库退回到执行事务前的初始状态。

数据库系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库相同的数据时,只允许持有锁的事务能更新该数据。其他事务必须等待,直到前一事务释放了锁,其他事务才有机会更新该数据。

 

 

Hibernate中使用JDBC事务

 

Hibernate中使用JTA事务

 

两种事务使用上的区别:

 

 

 

数据处理

1. 数据的新增

 

2. 数据的更新

 

3. 数据的删除

 

 

Hibernate 检索策略

Session有3种检索方式:load()、get()和find(),它们都用来从数据库中检索对象。

前两个是按照参数指定的OID来加载一个持久化对象,后者按照参数指定的HQL语句来加载一个或者多个持久化对象。

Hibernate提供了一下几种检索的方式:

    1. 导航对象检索方式(根据已经加载的对象,导航到其他对象)

    2. HQL检索方式(使用面向对象的HQL[Hibernate Query Language]查询语句)

    3. QBC检索方式(使用QBC[Query By Certeria] API来检索对象)

    4. 本地SQL检索方式(使用本地数据的SQL查询语句)

 

HQL[Hibernate Query Language]

HQL是面向对象的查询语言,它和SQL查询语句相似。

HQL具有以下功能:

1. 在查询语句中设定各种查询条件

2. 支持投影查询,即仅检索出对象的部分属性

3. 支持分页查询

4. 支持分组查询,允许使用having和group by关键字

5. 提供内置聚集函数

6. 能够调用用户自定义的SQL函数

7. 支持子查询,即嵌入式查询

8.  支持动态绑定参数

使用HQL查询按如下步骤进行:

1. 获取Hibernate Session对象

2. 编写HQL语句

3. 以HQL语句作为参数,调用Session的createQuery方法创建查询对象

4. 如果HQL语句包含参数,调用Query的SetXxx方法为参数赋值

5.调用Query对象的List等方法遍历查询结果

 

HQL检索方式

    1. 实体查询

    2. 属性查询

 

参数绑定

 

QBC[Query By Certeria]检索方式

采用HQL检索方式时,在应用程序中需要定义的基于字符串形式的HQL查询语句。QBC API提供了检索对象的另一种方式,它主要由Criteria接口、Certeria接口和

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值