转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
用Hibernate将Java对象持久保存到DB2通用数据库中         ★★★★

用Hibernate将Java对象持久保存到DB2通用数据库中

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1970 更新时间:2009/4/22 22:02:33
  ds.storeClass(Department.class); 
  sessionFactory = ds.buildSessionFactory();
 }
 catch (Exception e)
 { 
  throw new RuntimeException(couldn't get connection);
 }
}

在上述代码中,Datastore 对象通过调用 buildSessionFactory 方法获取 SessionFactory 的一个实例。如果没有给 buildSessionFactory 方法提供任何参数,它会在运行时类路径中查找缺省属性文件(即我们前面创建的 hibernate.properties 文件)查找。另一种办法是,如果在代码中需要对 properties 进行这种控制,可以将 Properties 对象传递给 buildSessionFactory 方法。

在该静态的初始化程序初始化 SessionFactory 对象之后,我们就可以调用 openSession() 方法。这个静态方法将为我们返回一个新的会话对象。如果您调用 openSession 时没有提供参数,SessionFactory 将为您自动管理 Connection。许多连接参数(如池的大小、语句高速缓存以及空闲时间)都可以通过 hibernate.properties 文件中的参数(或提供给 SessionFactory 的 properties 对象)进行配置。有关更多详细信息,请参阅 Hibernate 文档。

如果您的程序已经有一个现有的连接管理基础结构,那么您可以给 openSession(Connection con) 方法提供一个连接,Hibernate 将使用您提供的连接。

操作数据库对象

这一节描述如何写到数据库中,如何从数据库装入对象以及如何更新和查询数据库。

写到数据库
要写到数据库,我们将使用 SessionFactory 对象打开一个新的会话。然后,我们将创建想持久保存的对象并将它保存到会话中。接着,我们刷新(flush)会话,在连接上调用提交(commit),最后关闭(close)会话。

刷新会话会强制 Hibernate 把内存中的数据和数据库同步起来。Hibernate 将定期自动刷新,但不能保证在什么时候进行。于是,我们将内存中的数据显式刷新到数据库,从而确保数据立即写入数据库。

在关闭会话之前,还必须确保提交了数据库连接。

Session session = sessionFactory.openSession();

department = new Department();
department.setCity(Austin);
department.setState(TX);
department.setName(IBM Global Services);
department.setDepartmentID(211);

session.save(department);
session.flush();
session.connection().commit();
session.close();

从数据库装入对象
装入对象就是使用对象的标识将对象调回到内存中的过程。这与我们在查询数据库中讨论的查询对象不同。

为了从数据库装入对象,我们同样需要一个会话。我们还需要想装入的对象的主键。就我们前面所编写的示例来说,如果想将 Department 装回到对象中,我们可以用表示 Department 的 Class 对象来调用 session.load 方法,我们的主键是“211”。

Session session = sessionFactory.openSession();

Department dept = (Department) session.load(Department.class, new Integer(211));
session.close();

更新数据库
要更新一个对象,可以在创建该对象的那个会话中进行,也可以在一个完全不同的会话中进行。在同一个会话中更新对象很容易;只要修改对象的状态就行了。要在不同的会话中更新对象,则必须装入(或查询)该对象,然后更新它。

同一个会话

session.save(department);
session.flush();
department.setName(newName);
session.flush();

不同的会话

first session
Department department = new Department();
department.setDepartmentId(211);
department.setName(someName);
.
.  set other stuff on department
.

session.save(department);
session.flush();
session.connection().commit();
session.close();

later session
laterSession = sessionFactory.openSession();
Department dept = (Department) session.load(Department.class, new Integer(211));
dept.setName(aDifferentName);
laterSession.flush();
session.connection().commit();
laterSession.close();

查询数据库

查询数据库有几种方式。最简单的方式是使用 session.find 方法。您必须使用 Hibernate 简单但却功能强大的面向对象的查询语言来给 session.find 提供一个查询。下面的示例演示了一个非常简单的查询。如果要进行更复杂的查询,请参阅 Hibernate 文档获取更多详细信息。

Department department = new Department();
department.setDepartmentId(211);
department.setName(someName);
.
.  set other stuff on department
.

session.save(department);
List list = session.find
(from dept in class com.ibm.hibernate_article.Department where dept.city='Austin' );

进行测试

既然我们有了会话对象并且知道了如何进行一些操作,那我们就可以在我们简单的对象模型上编写一些 CRUD 测试来看看 Hibernate 的实际运行情况。这是一种比 JUnit 测试好得多的测试方法。您可以随意看看本文所附的源代码中的 HibernateTest.java 测试用例。

结束语

在本文中,我们仅仅粗浅地讨论了如何使用 Hibernate。我们在几个 POJO(Plain Old Java Object,传统的 Java 对象)的上下文中介绍 Hibernate API。不过,请注意广泛的 Hibernate API 涵盖了更高级的主题,如 one-to-many(一对多)映射、事务以及集合。既然您已“涉足”Hibernate,那应该能更自在地探索如何在编程工作中使用开放式源代码产品了吧。
我们在一些项目中使用了 Hibernate,使用时遇到了一些障碍。我们发现,SourceForge 上的 Hibernate 论坛对于解答我们的问题是不可或缺的。在该论坛上,Hibernate 的主要开发人员非常活跃,他们几乎会解答所有贴子。
论坛的网址为:
httpsourceforge.netforumforum.phpforum_id=128638
Hibernate Web 页面的网址:
httphibernate.bluemars.net

关于作者

  Javid Jamae 是一位专攻企业应用程序和软件方法学咨询的独立软件顾问。您可以通过 javidjamae@yahoo.com 与 Javid 联系。
  Kulvir Singh Bhogal 的工作角色是 WebSphere 顾问,在全美实施 IBM 的电子商务战略。您可以通过 kbhogal@us.ibm.com 与 Kulvir 联系。
 
 

上一页  [1] [2] 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台