对象-关系映射(O/R映射)是许多软件开发项目的常见需求。数据持久化过程中所涉及到的活动是非常乏味且易于出错的。如果考虑到不可避免的需求变化,我们就面临很大的麻烦:数据存储结构必须与源代码保持同步。再加上移植性问题,事情就变得非常复杂。
而Hibernate可以帮助我们轻松地在永久性存储介质中保存数据,而不需要在选择存储、安装或配置类型方面浪费太多精力。Hibernate允许我们存储任何类型的对象,因此,应用程序不需要知道其数据将使用Hibernate进行持久化。当然,这里提到的任何事情都可以逆向应用:现在从存储器获取已经准备好的对象是很平常的事情。更新和删除数据也是如此。
开始之前
在开始之前,您需要Hibernate的发行版,可以在Hibernate web站点(www.hibernate.org)上找到它。我们将使用2.0.3版本。对于数据库,我们将使用Hypersonic SQL 1.7.1版本,它可以在hsqldb.sourceforge.net上找到。 Hibernate还支持许多开源或商业数据库,例如MySQL、PostgreSQL、Oracle、DB2等。对于受支持的任何数据库,安装这个教程都很简单。完整列表参见官方文档。
注意:如果您不希望类被持久化在数据库中(比如说,您只希望进行串行化),那么Hibernate API为您提供了net.sf.hibernate.persister.EntityPersister类和net.sf.hibernate.persister.ClassPersister接口。通过编写子类或实现它们,您可以编写自己的持久化类,并根据需要使用它们。
下载了所有必需的安装包后,我们必须设置测试环境。基本上,我们所需做的就是把下载的.jar文件放到CLASSPATH中。这包括Hibernate发行版中的hibernate2.jar和Hypersonic的lib/ 目录下的hsqldb.jar。Hibernate还需要其他的几个库,这些库都可以在<hibernate-dist>/lib目录中找到。并不是该目录下的所有.jars文件都需要,但是如果您使用所有文件,也没有什么坏处。在我们开始研究Hibernate之前,我们将首先定义我们的问题域。
注意:Hibernate使用Apache的commons-logging。它是一个智能工具,如果找到log4j,它就会默认地使用它。Log4j是一个出色的日志记录库,我们将在这个教程中使用它。如果您还没有这个软件(您真的应该安装这个软件!),可以从Log4j homepage下载,并将它添加到CLASSPATH中。使用Hibernate团队所提供的示例log4j.properties,它可以在<hibernate-dist>/src目录下找到。
问题引入
每个开发人员都至少执行过一次类似的任务:创建一个订单,把一些产品放在其中,它就变成订单项,然后保存该订单。
我们使用这些简单的SQL命令来设置数据库:
CREATE TABLE ORDERS(
ID VARCHAR NOT NULL PRIMARY KEY,
ORDER_DATE TIMESTAMP NOT NULL,
PRICE_TOTAL DOUBLE NOT NULL)
CREATE TABLE PRODUCTS(
ID VARCHAR NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
PRICE DOUBLE NOT NULL,
AMOUNT INTEGER NOT NULL)
CREATE TABLE ORDER_ITEMS(
ID VARCHAR NOT NULL PRIMARY KEY,
ORDER_ID VARCHAR NOT NULL,
PRODUCT_ID VARCHAR NOT NULL,
AMOUNT INTEGER NOT NULL,
PRICE DOUBLE NOT NULL)
这个数据模型非常简单。对于一个实际的“生产质量”数据模型,我们会需要外键、索引、额外的字段等等。对于本教程,上面的数据模型就可以了。
Java代码
尽管这些业务需求简单且易于理解,但是编写一堆准备好的语句的传统方法将很快令人厌烦。而Hibernate将会把我们解放出来。我们所需的只是一组简单的映射文件。但首先我们需要编写Java类。
注意:我们将把所有将要持久化的类放到test.hibernate包中,把所有辅助类放到test包中。
Product
这个简单的类只定义了必要的字段:ID、产品名称、产品价格和这种产品的当前库存量。由于Hibernate使用无格式的简单JavaBeans,我们需要做的只是为每个重要字段(在我们的示例中,所有字段都是重要字段)创建getter和setter方法,以及默认的构造函数。
package test.hibernate;
public class Product {
private String id;
private String name;
private double price;
private int amount;
public String getId() {
return id;
}
public void setId(String string) {
id = string;
}
// 默认的构造函数及其他
// 为了简洁起见,getter/setter方法没有显示
// ...
}
我们还需要重写toString()方法。这将帮助我们使用简单的System.out.println(obj)调用来跟踪应用程序流:
public String toString() {
return
"[Product] " name "(" id
") price=" price " amount=" amount;
}
这就是全部的product类代码。但Product没有实现任何接口,也没有继承任何类,Hibernate又如何知道持久化该类型的对象呢?答案很简单:Hibernate可以处理任何类型的Java对象,只要它能够遵循JavaBeans约定。
Order
我们需要创建的下一个类是Order,它甚至比Product更简单:它只包含ID、创建日期、总价格和该Order所包括的OrderItems的Set。当然,还需要创建getter和setter方法以及默认的构造函数。
package test.hibernate;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class Order {
private String id;
private Date date;
private double priceTotal;
private Set orderItems = new HashSet();
// 自动设置该Order的创建时间
public Order() {
this.date = new Date();
}
public String getId() {
return id;
}
public void setId(String string) {
id = string;
}
// 为了简洁起见,其他getter/setter方法没有显示
// ...
}
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
0
相关文章
为基于J2ME的手机开发移动3D游戏 实用技术分析:JSP连接数据库程序代码 导航树效果,JSP JavaScript 实现 从实例出发:如何删除JDBC数据源 J2ME三种低级用户界面事件处理技术比较 JSP语法(3) JSP学习笔记__JSP标签库 快速、简便的使用AJAX技术操作的三部曲 利用视图链接使Eclipse应用程序更丰富 JBuilder2005 Struts深度体验之改造
最新评论共有 0 位网友发表了评论
查看所有评论
发表评论
热点关注
- 困扰JSP的一些问题与解决方法
- JSP动态输出Excel及中文乱码的
- 一个javabean轻松实现对数据库
- 用jsp处理Cookie
- Servlet和JSP概述
- JSP及语法概要
- 利用JSP建立Web站点
- 在JSP中访问数据库方法
- 使用JSP开发WebMail系统
- 开发高效率企业动态Web系统
- JSTL 入门:表达式语言
- JSP传送动态图片
- jspSmartUpload上传下载全攻略
- Servlet、Jsp中的多国语言显示
- html与jsp开发分离技术
- 利用JSP 2.0开发Web应用程序1
- 利用JSP 2.0开发Web应用程序2
- Servlets和JSP Pages最佳实践
- 使用JSP JAVABEAN XML 开
- 如何成为一个成功的Jsp程序员
相关文章
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营
建站经验
策划盈利
搜索优化
网站推广
免费资源
网站联盟
联盟新闻
联盟介绍
联盟点评
网赚技巧
行业资讯
业界动态
搜索引擎
网络游戏
门户动态
电子商务
广告传媒
网络编程
Asp.Net编程
Asp编程
Php编程
Xml编程
Access
Mssql
Mysql
服务器技术
Web服务器
Ftp服务器
Mail服务器
Dns服务器
安全防护
软件技巧
Word
Excel
Powerpoint
Ghost
Vista
QQ空间
QQ
FlashGet
迅雷
Internet Explorer
网页制作
FrontPages
Dreamweaver
Javascript
css
photoshop
fireworks
Flash
程序设计
Java技术
C/C++
VB
delphi
网络知识
网络协议
网络安全
网络管理
组网方案
Cisco技术
操作系统
Win2000
WinXP
Win2003
Mac OS
Linux
FreeBSD


