Hibernate笔记

来源:互联网 发布:mac系统ai快捷键 编辑:程序博客网 时间:2024/06/07 11:33

Hibernate的PO对象状态:=>临时状态、持久状态、托管状态

1、临时态

由new命令开辟内存空间刚生成的Java对象就事处于临时对象

如:User user  = new User();

如果没有变量对该对象进行引用,它将被Java虚拟机回收。

在hibernate中通过Session的save()或saveOrUodate()方法将临时对象与数据库关联起来,

并将数据插入数据库中,此时该临时对象转变成持久化对象(PO)

2、持久态

处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。

如果使用delete()方法,对应的持久对象将变成临时对象,该对象不再与数据库的记录关联。

当一个Session执行close()或clear()之后,持久对象会变成托管对象,此时搞对象虽然具有数据库识别值,但它已不在hibernate持久层的管理之下。

持久对象特点:和Session实例关联。      在数据库中有与之关联的记录。

3、托管态

托管对象可通过update()、saveOrUpdate()等方法转化成持久对象。

托管对象本质上与临时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收

Hibernate的Configuration类

Configuration类的主要作用是解析Hibernate的配置文件和映射文件中的信息,即负责管理Hibernate的配置信息。

通过Configuration对象的buildSessionFactory()方法可创建SessionFactory对象。


Hibernate的SessionFactory接口

SessionFactory接口负责初始化Hibernate。它充当数据存储的代理。并负责创建Session对象。

SessionFactory是线程安全的,可以被多个线程调用。

因为SessionFactory很消耗资源,所以多数情况下一个应用中只初始化一个SessionFactory,为不同线程提供Session。


Hibernate的Session接口

Session对象是Hibernate技术的核心,持久化对象的声明周期、事务的管理及持久化对象(PO)的增加、修改和删除都是通过Session对象完成的。


使用get()方法获取PO对象时是立即加载

使用load()方法获取PO对象时是延迟加载


1、对一个已经持久化的对象调用save()或update()方法是没有意义的。

2、Session的update()方法可以用来更新托管对象到持久化对象。


Hibernate的Query接口

Query query = session.createQuery("HQl语句");

LIst list = query.list();


Hibernate的高级组件

1、使用关联关系操纵对象

1)一对一关联关系 主键关联:<one-to-one />

外键关联:<many-to-one  unique="true" />

2)一对多关联关系 单向关联:<set inverse="false"><key/><one-to-one/></set>

双向关联:<many-to-one/>

3)多对多关联关系 在映射多对多关系时,需要另外使用一个连接表,连接表中包含两个字段表Aid和表Bid,并在映射文件中使用<many-to-many/>


2、Hibernate框架中的数据查询方式

Hibernate Query Language(HQL)是针对持久化对象(PO),用来取得对象,HQL是完全面向对象的,具备继承、多态和关联等特性

3、Hibernate中的事务管理

事务(Transaction)是数据库操作的基本单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改是受到用户干扰。

事务的特性:原子性、一致性、隔离性、持久性 简称ACID

4、Hibernate中的Cache管理

Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起到一个蓄水池和缓冲的作用。

Cache对于大量依赖数据读取操作的系统而言尤其重要。


0 0