Hibernate实战的详细分析

开发 后端
本文从配置环境入手,对Hibernate实战的详细分析,见证Hibnate的复杂强大,可以让你应付复杂的应用

对象关系映射(ObjectRelativeMapping)简称ORM,是面向对象开发的一个热点,用来解决JDBC开发中手动进行OR映射的繁杂与不便。EJB中的实体Bean在这个领域是很著名的——既因为它的先进而著名,也因为它的低效而著名。有过实体Bean开发经验的人可能都会为实现远程接口造成的效率低下而头痛,在很多不大不小的项目中,使用实体Bean是否得不偿失,争论很大。一个轻量级的持久化方案也许能够解决一些问题,Hibernate应此而生。

Hibernate是一个中间层,它的目的是把数据库中的关系通过一定的规则映射成为对象,让Java开发人员不用太多的考虑底层数据库的问题,只需要像通常情况下管理对象一样的管理数据。在关系数据库仍将持续占据市场的情况下,它很可观。在数据持久化领域,即便是轻量级的方案也会是复杂饶舌的,也许如同周杰伦的音乐一样不知所云。在学习它之前,最好先回想一下以前进行数据库开发中遇到的问题和不便,想想为什么需要一个持久化层,才能知道很多操作的目的是什么,以及为什么要这么干,在这个问题上我不想做更多的叙述,因为“长久以来……”这样的句式通常long(不好意思,打不出来)长,会对我的键盘和热情造成很大的磨损。如果让我写一本书,那么我会乐意去叙述什么是数据持久化,它有什么好处等等。废话少说,来了。

首先需要配置环境,下载Hibernate(www.hibernate.org),把lib下的*.jar添加到classpath,你的数据库JDBC驱动程序也应该在classpath中。打开hibernate.properties,针对你使用的数据库,配置相应的信息,比如我使用的是MSSQLServer,配置如下:

##MSSQLServer
hibernate.dialectnet.sf.hibernate.dialect.SQLServerDialect
hibernate.connection.driver_classcom.microsoft.jdbc.sqlserver.SQLServerDriver
hibernate.connection.urljdbc:microsoft:sqlserver://localhost:1433;DatabaseName=zizz
hibernate.connection.usernamesa
hibernate.connection.password

其中很大部分是已经写好的,只需要取掉注释即可,我自己只是修改了数据库名称、帐号、密码。建立一个名为zizz的数据库备用。

然后把这个文件拷贝到你的应用的根目录下。

我们谈论了很多次映射,在Hibernate实战中应该首先来看看这个映射是如何完成的。假设一个最简单的应用,写一个功能最单一的留言板,设计的数据有留言的编号、留言者名称、留言内容,还有留言时间。足够简单吧,换做是你打算怎么干?我猜你要首先建立一个数据库表格,名字也许叫做guestbook。No,这不是面向对象的方式,不妨首先从对象的角度来考虑。我们当然希望每一条留言都以对象的方式呈现,每个对象应该具有的属性有:id、author、content、time。偷个懒,没有画UML。下面这个类应该是很容易理解的:

//GuestBook.java
packageorg.bromon.zizz;
importjava.util.*;
publicclassGuestBook
{
privateintid;
privateStringauthor;
privateStringcontent;
privateCalendartime;
privatevoidsetId(intid)
{
this.id=id;
}
publicintgetId()
{
return(id);
}
publicvoidsetAuthor(Stringauthor)
{
this.author=author;
}
publicStringgetAuthro()
{
return(author);
}
publicvoidsetContent(Stringcontent)
{
this.content=content;
}
publicStringgetContent()
{
return(content);
}
publicvoidsetTime(Calendartime)
{
this.time=time;
}
publicCalendargetTime()
{
return(time);
}
}

基本上是Hibernate实战中最简单的Bean了,如果觉得困难的话,请你先回火星等我。

需要注意的是setId方法被指定为private,这是因为我希望用这个字段做主键,它最好由系统自动生成,所以不应该由用户来指定,这个方法专为Hibernate准备,所以是私有的。

如何把这个类与数据库映射起来?看看Hibernate的魔法,使用一个XML文件来描述,它应该被命名为GuestBook.hbm.xml:


"-//Hibernate/HibernateMappingDTD2.0//EN"
"'target=_blank>http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">









虽然有点陌生,但是很易读,仔细琢磨一下。

下面来编写我们的应用,它的功能是插入数据:

//Operate.java
packageorg.bromon.zizz;
importnet.sf.hibernate.*;
importnet.sf.hibernate.cfg.*;
importnet.sf.hibernate.tool.hbm2ddl.*;
importjava.util.*;
publicclassOperate
{
publicstaticvoidmain(Stringargs[])
{
try
{
Configurationcfg=newConfiguration().addClass(GuestBook.class);
SessionFactorysessions=cfg.buildSessionFactory();
newSchemaExport(cfg).create(true,true);
Sessionsession=sessions.openSession();
GuestBookgb=newGuestBook();
gb.setAuthor(“Bromon”);
gb.setContent(“留言的内容”);
gb.setTime(Calendar.getInstance());
Transactionts=session.beginTransaction();
session.save(gb);
ts.commit();
session.close();
}catch(Exceptione)
{
System.out.println(e);
}
}
}
编译吧:javac–d.*.java
执行一下:javaorg.bromon.zizz.Operate

到数据库里面看看,表格已经建立好了,并且数据也已经保存。如果把

newSchemaExport().create(true,true);

注释掉,那么系统不会创建表格,而只是在已有的表格中添加新的记录,当然,如果表格不存在的话,会产生异常。

你已经看到了Hibernate实战神奇魔法的5%,它足够的复杂强大,可以让你应付复杂的应用,不过今天还是到此为止吧。

【编辑推荐】

  1. Hibernate查询方法与缓存的关系
  2. Hibernate多表查询结果处理
  3. Hibernate连接池配置实例
  4. Hibernate下载和安装
  5. Hibernate中的Cache管理
责任编辑:张攀 来源: CSDN博客
相关推荐

2009-09-25 14:23:39

2009-09-28 10:39:01

Hibernate基础

2010-04-26 18:17:19

Oracle存储过程

2009-12-03 17:41:40

PHP应用发展

2021-10-25 19:52:52

IntentFilte

2009-09-14 16:21:34

LINQ To XML

2009-09-09 09:48:43

Linq延迟加载

2009-10-10 13:52:57

VB Update方法

2009-09-08 15:56:50

Linq使用Group

2009-11-20 13:11:44

Oracle XML数

2009-09-14 13:50:35

LINQ编程模型

2010-01-06 13:50:37

.NET Framew

2010-01-06 16:12:52

分析Json stri

2010-04-26 14:32:21

Oracle SQL

2010-03-08 17:18:46

Linux du命令

2010-04-12 10:53:07

Oracle SQL

2010-07-02 11:19:31

IP协议头格式

2009-03-24 08:30:54

AndroidGoogle移动os

2009-09-07 13:19:44

C#线程同步

2009-09-03 17:57:06

C#声明事件
点赞
收藏

51CTO技术栈公众号