非常感谢最近发布的hibernate 3中的xml持久性特性,java开发者现在拥有了一个框架组件,它为易于实现的对象关系(or)和xml持久性提供了高效的和一致的方法。
hibernate的易用性、高性能和对象关系持久性等高级特性给it界带来了很大的惊喜。hibernate的最新版本(版本3,3月29日发布的)给产品api带来了一个重要的新特性:xml持久性。有了hibernate 3之后,java应用程序开发者可以轻易地把xml文档合并到关系型数据库中。 这个新特性应该明确地告诉已有的hibernate开发者,因为它也遵循pojo(纯的旧java对象)相同的一致性方法,需要学习的知识最少。xml持久性的优点也应该介绍给新用户。本文讲解的是hibernate 3持久性方法。 xml持久性为什么重要 大多数大型商业数据库都支持某种形式的本地xml持久性。由于xml持久性是一个相对较新的机制--即使对大型厂商也是如此,这个领域中的标准还在不断地浮现。其结果是,为了把无处不在的关系型持久性机制与日益增长的xml解决方案集成在一起,架构师必须依赖厂商特定的特性或者实现定制的xml持久性框架组件。这两个选择都没有太大的吸引力。厂商特定的特性不是普及的,因为可能产生厂商封锁(lock-in),而定制的框架组件实现可能耗费大量的时间和财力,导致代码难于维护。 在or(对象关系)持久性方面,hibernate xml持久性是一个自然而然的解决方案。它可以跨越hibernate支持的所有关系型平台(如虚拟的或真实的关系型平台)移动,允许自由的迁移对象、基于xml的应用程序和集成解决方案而不用担心下层的关系型实现方法。 体系结构的细节信息 hibernate是一个良好架构的框架组件,它无缝地利用了本地的环境,不需要用户进行任何特殊的干涉或安装操作。从一个数据库切换到另外一个数据库通常只需要改变驱动程序,并配置hibernate(在线配置设置信息)来使用另外一种数据库语言。 hibernate利用dom4j框架组件进行xml的分析和维护。如果需要完全利用hibernate的xml特性,你就必须对dom4j非常熟悉。一般来说,你会发现dom4j比java提供的jaxp或与jaxp兼容的xml分析器要容易使用一些。它要求我们学习的相关知识较少,并且利用最少的dom4j知识你就能够高效率地使用hibernate xml持久性。 实际例子:价格目录同步<products>
<product prod_id="3" sku="100101">
<description>athlete mode body fat scale</description>
<list_price>100.00</list_price>
<drop_price>60.00</drop_price>
</product>
<product prod_id="4" sku="100102">
<description>thermometer</description>
<list_price>20.00</list_price>
<drop_price>11.00</drop_price>
</product>
</products>create table product
(
id int unique not null,
description varchar(45) not null,
sku varchar(45) unique not null,
list_price float,
base_price float,
order_price float,
constraint pk_product primary key (id )
)/** product对象表现了定价目录项*/
public class product {
int id;
string sku;
string description;
double listprice;
double baseprice;
double orderprice;<?xml version="1.0"?>
<!doctype hibernate-mapping public
"-//hibernate/hibernate mapping dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="demo">
<class name="product"
table="product"
node="product">
<id name="id"
type="int"
node="@prod_id"
column="id">
</id>
<property name="sku" node="@sku" column="sku" not-null="true"/>
<property name="description" node="description" column="description" not-null="true"/>
<property name="listprice" node="list_price" column="list_price" />
<property name="baseprice" node="drop_price" column="base_price"/>
<property name="orderprice" column="order_price"/>
</class>
</hibernate-mapping>document = saxreader.read(inputxml);
list users = document.selectnodes("//product");
try {
session session = ibernateutil.sessionfactory.opensession();
transaction transaction = session.begintransaction();
session dom4jsession = session.opensession(entitymode.dom4j);
iterator iter = users.iterator();
while (iter.hasnext()) {
object next = iter.next();
dom4jsession.saveorupdate("demo.product", next );
}// end while
transaction.commit();
session.close(); Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器