Java之旅hibernate(3)——第一个hibernate的样例
在解说样例之前。我们首先来理解一下hibernate的工作原理。理解原理将会帮助我们更好地理解hibernate和运用hibernate。
1. 原理图
利用hibernate进行数据的持久化操作,必定离不开与数据库打交道。依据上张图我们来看看hibernate是怎样工作的。
Ø Congratulation
一个使用hibernate的程序必须引入这三个核心文件。
Configuration读取Hibernate的配置文件和映射文件里的信息。即载入配置文件和映射文件。并通过Hibernate配置文件生成一个多线程的SessionFactory对象;
Configurationcfg = new Configuration().configure();这是读取配置的写法。
具体功能的具体解释:
Configuration类负责配置并启动Hibernate。创建SessionFactory对象。在Hibernate的启动过程中。Configuration类的实例首先定位映射文档位置、读取配置。然后创建SessionFactory对象。
Ø SessionFactory
这是创建session必须的对象,也就是说SessionFactory对象生成一个线程Session对象。详细的获取是:
SessionFactoryfactory = cfg.buildSessionFactory();
详细作用:
SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理。并负责创建Session对象。这里用到了工厂模式。须要注意的是SessionFactory并非轻量级的,由于普通情况下,一个项目通常仅仅须要一个SessionFactory就能够了。当须要操作多个数据库时。能够为每一个数据库指定一个SessionFactory。SessionFactroy产生Session 实例的工厂。
Ø Session
session =factory.openSession();
Session对象生成Query对象或者Transaction对象。可通过Session对象的get(),load(),save()。update()。delete()和saveOrUpdate( )等方法对PO(PO是持久化对象)进行载入、保存、更新、删除等操作;在查询的情况下。可通过Session 对象生成一个Query对象,然后利用Query对象运行查询操作;假设没有异常,Transaction对象将提交这些操作结果到数据库中。
详细作用:
Session接口负责运行被持久化对象的操作,它有get( ),load( ),save( ),update( )和delete( )等方法用来对PO 进行载入、保存、更新及删除等操作。
但须要注意的是Session对象是非线程安全的。
Ø Transaction
在hibernate中。session创建事务对象。而且事务是没有自己主动提交的,我们仅仅能手动去控制。故而session中的事务须要我们手动开启和关闭。
详细作用:
Transaction接口负责事务相关的操作。用来管理Hibernate事务,它的主要方法有commit()和rollback(),能够使用Session的beginTransaction()方法生成。它是可选的,开发者也能够设计编写自己的底层事务处理代码。
Ø Query
Query接口负责运行各种数据库查询。它能够使用HQL语言,用来对PO进行查询操作。它能够使用Session的createQuery()方法生成
Ø Hibernate的配置文件和映射文件
配置文件
Hibernate配置文件主要用来配置数据库连接參数,比如,数据库的驱动程序。URL,username和password、数据库方言等。它有两种格式:hibernate.cfg.xml和hibernate.properties。
这两种的配置内容基本一致,仅仅是前者比后者在使用上面更加的方便而已。使得映射配置比之前更加的方便。
hibernate.cfg.xml能够在其<mapping>子元素中定义用到的xxx.hbm.xml 映射文件列表。而使用hibernate.properties则须要在程序中以硬编码方式指明映射文件。
在普通情况下。hibernate.cfg.xml 是Hibernate的默认配置文件。
映射文件
而映射文件是:映射文件(xxx.hbm.xml)用来把PO与数据库中的数据表、PO之间的关系与数据表之间的关系。以及PO的属性与表字段一一映射起来,它是Hibernate的核心文件。
讲到这里不得不提PO, PO就是持久化对象(Persistent Objects,PO)。能够是普通的JavaBean,惟一特殊的是它们与(仅一个)Session相关联。JavaBean在Hibernate中存在三种状态:暂时状态(transient)、持久化状态(persistent)和脱管状态(detached)。当一个JavaBean对象在内存中孤立存在不与数据库中的数据有不论什么关联关系时,那么这个JavaBean对象就称为暂时对象(TransientObject);当它与一个Session相关联时。就变成持久化对象(Persistent Object);在这个Session被关闭的同一时候,这个对象也会脱离持久化状态。变成脱管对象(Detached Object)。能够被应用程序的不论什么层自由使用,比如,可用做与表示层打交道的传输数据对象(Data transfer Object)。
关于hibernate的三种状态我们会在之后进行具体的解说。
2. 代码展示
不知不觉中说了这么多,代码展示仅仅好放到下一篇了~