Java之旅hibernate(三)——第一个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,用户名和密码、数据库方言等。它有两种格式: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. 代码展示
不知不觉中说了这么多,代码展示只好放到下一篇了~
版权声明:本文为博主原创文章,未经博主允许不得转载。