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对于大量依赖数据读取操作的系统而言尤其重要。