• 1. Hibernate 核 心 API (Core API for Hibernate)杨少波njtuyang@gmail.com中科院计算所职业培训中心
  • 2. Hibernate 核 心 API在本讲您能了解如下知识点 (The Emphases in Teaching Materials) 持久实例的生命周期状态 Session接口 Transaction接口 SessionFactory接口 Configuration接口 应用中所需要的JAR类库
  • 3. 1、Hibernate中的持久化对象的生命周期 (1)提供对象状态管理的目的 使开发者不再需要理会底层数据库系统的细节 使用Hibernate的开发者应该总是关注对象的状态(state),不必考虑SQL语句的执行 (2)Hibernate 仅仅定义了三种状态:瞬时、持久和脱管,对客户端代码隐藏了其内部实现的复杂性
  • 4. (3)三种状态相互转换的说明
  • 5. 2、核心API介绍--- Session接口(1)它是轻量级的类 在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。 这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。(2)但它是非线程安全的 值得注意的是Session对象是非线程安全的,因此最好是一个线程只创建一个Session对象(将它设计为局部对象)。
  • 6. (3)Session看作介于数据连接与事务管理一种中间接口 我们可以将session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。 (4)每一个Session实例和一个数据库事务绑定 通常将每一个Session实例和一个数据库事务绑定,也就是说,每执行一个数据库事务(操作),都应该先创建一个新的Session实例。 如果事务执行中出现异常,应该撤销事务;同时不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例占用的资源。(5)如何获得Session对象 首先创建SessionFactory对象,应用程序如果访问多个数据源时,则应该产生多个SessionFactory;但是仅仅为了服务于某个请求时,不要创建一个新的SessionFactory,因为创建SessionFactory 需要耗费大量的资源。
  • 7. 然后根据SessionFactory再创建Session对象(6)Session的编程规则---需要随时更新和释放 注意:应该要session.close()语句放在finally语句块中。
  • 8. (7)Sessin 接口中针对单条记录的基本的CURD操作方法 save()方法:把Java对象保存数据库中 update()方法:更新数据库中的Java对象 delete()方法:把Java对象从数据库中删除 load()方法:从数据库中加载Java对象 find()方法:从数据库中查询Java对象
  • 9. 3、核心API介绍---Transaction接口 (1)Transaction接口是一个可选的API 事务将应用代码从下层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务等 这样将允许应用通过一组一致的API控制事务边界。 (2)定义 注意:该接口有多个不同的事务的实现类(3)从本地事务切换到分布式事务的方法
  • 10. 因为让持久层具备可移植性是人们的理想。Hibernate提供了一套称为Transaction的封装API, 用来把部署环境中的本地事务管理系统转换到Hibernate事务上。 (4)为什么要提供该Transaction 接口—数据库类型和个数 Transaction接口是对实际事务实现的一个抽象。 之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。
  • 11. (5)事务编程的基本格式
  • 12. (6)注意在事务编程中一定要进行事务提交
  • 13. (1)利用工厂类SessionFactory中取得Session的实例 (2)SessionFactory并不是轻量级的 但要注意的是SessionFactory并不是轻量级的! 实际上它的设计者的意图是让它能在整个应用中共享。 (3)每个数据存储源对应创建一个SessionFactory(单例)4、核心API介绍--- SessionFactory接口
  • 14. (4)SessionFactory的实现类 SessionFactory的实现类中定义了许多集合类型的属性 它们用于存放Hibernate配置信息、映射元数据信息等。
  • 15. (5)SessionFactory的缓存 可分为两类:内置缓存和外置缓存。 SessionFactory的内置缓存中存放了Hibernate配置信息和映射元数据信息、同时也缓存了Hibernate自动生成的SQL语句等;SessionFactory的外置缓存是一个可配置的缓存插件 在默认情况下,SessionFactory不会启用这个缓存插件。 外置缓存能存放大量数据库数据的拷贝,外置缓存的物理介质可以是内存或者硬盘。
  • 16. (1)作用---加载hibernate.cfg.xml并完成系统的配置 Configuration接口的作用是对Hibernate进行配置、并启动Hibernate和连接数据库系统。 在Hibernate的启动过程中,Configuration类的实例首先定位缺省XML配置文件(hibernate.cfg.xml),并读取关的配置项目,然后创建出一个SessionFactory对象。 根据Configuration对象创建一个SessionFactory对象5、核心API介绍---Configuration接口
  • 17. (2)也可以采用自定义的XML配置文件 可以指定开发者自己的*.hbm.xml文件的位置,而不是使用默认的classpath下面的hibernate.cfg.xml。但需要在代码中指示开发者自定义的XML配置文件。 然后系统在启动时会自动地查找对应的自定义的XML配置文件。
  • 18. (4)编程示例 此时将需要通过代码添加对应的O/R Mapping映射文件。(3)如果采用hibernate.properties文件
  • 19. (1)Hibernate系统核心包6、在Hibernate时所需要的各个JAR包文件 将hibernate3.jar文件拷贝到程序的上下文类路径下(classpath),和我们应用程序的其他库文件放一起。
  • 20. (2)在应用Hibernate时还需要一些第三方的类库 在运行时,Hibernate框架还需要一些第三方类库,它们在Hibernate发行包的optional和bytecode等目录下。
  • 21. (3)Hibernate所需要第三方类库的Jar包文件的列表
  • 22. 1、子曰:“学而不思则罔,思而不学则殆。” “学而时习之” 2、子曰:“知之者不如好之者,好之者不如乐之者”3、子曰:“三人行,必有我师焉”4、子曰:“我非生而知之者,好古,敏以求之者也”本讲的简要回顾5、师者:“传道、授业和解惑”