Hibernate总结

一.Hibernate原理

1:通过configuration来读cfg.xml文件

2:通过configuration得到SessionFactory工厂,缓存SessionFactory,并且释放掉configuration对象

3:通过SessionFactory工厂来创建Session实例

4:通过Session打开事务

5:通过session的api操作数据库

6:事务提交

7:关闭连接(结束事务,关闭session)

二.数据库操作:

执行添加:

1:TO--->PO:Hibernate先在缓存中查找,如果发现在内部缓存中已经存在相同id的PO,就认为这个数据已经保存了,抛出例外。

如果缓存中没有,Hibernate会把传入的这个TO对象放到session控制的实例池去,也就是把一个瞬时对象变成了一个持久化对象。

如果需要Hibernate生成主键值,Hibernate就会去生成id并设置到PO上

2:客户端提交事务或者刷新内存

3:根据model类型和cfg.xml中映射文件的注册来找到相应的hbm.xml文件

4:根据hbm.xml文件和model来动态的拼sql,如下:

insertinto表名(来自hbm.xml)(字段名列表(来自hbm.xml))values(对应的值的列表(根据hbm.xml从传入的model中获取值))

5:真正用JDBC执行sql,把值添加到数据库

6:返回这个PO的id。

三.hibernate关键类的运行原理

1.configuration:主要负责Hibernate的配置信息。主要包括数据库连接的属性,configuration实例后,会构建SessionFactory实例;如果需要多个数据库连接,就会创建多个sessionFactory实例,大多数是一个数据库对应一个。

2.Session:提供大部分持久化方法,同事也能对事物进行控制(注意:session的设计是一个非线程安全的,一个session实例只能有一个线程使用,否则就会瘫痪)

四.映射文件配置

1.一对一配置:<one-to-onename=""class=""cascade="all"out-join="true"/>

2.一对多:<ont-to-many/>

3.多对多:<many-to-many/>

4.执行数据库操作的主要:Criteria,HQL两种。

5.数据加载方式:(1)即时加载:实体加载完后就立即加载关联数据(lazy="false")

(2)延迟加载:当关联数据被访问时立即加载关联数据。

(3)预先加载:实体和关联数据一起加载

(4)批量加载:可以进行性能优化。(batch-size)

五.持久化实现:

1.实体对象的3个状态:自由状态,持久状态,游离状态

2.VO与PO的区别:(1)VO是比较独立的实体对象,处在非管理状态;

(2)PO是处在实体管理容器的对象,当事物提交时将反映到数据库中。

(3)如果PO与其对应的session分离,就转变成VO了。

3.数据缓存:(1)事物级缓存:也称内部缓存,基于session的生命周期实现的。session销毁缓存就销毁了。

(2)应用/进程级缓存:由sessionFactory实现,由它创建的session共享缓存,但是缺乏同步机制。

(3)分布式缓存:主要解决多实例并发运行过程中的数据同步问题。

相关推荐