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,用户名和密码、数据库方言等。它有两种格式: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.      代码展示

  不知不觉中说了这么多,代码展示只好放到下一篇了~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值