频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

开发购物车应用程序(2)

作者: 朱先忠编译 出处:51CTO.com  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2006-11-27 16:52
关 键 词:Java  Hibernate  Tomcat  购物车
阅读提示:我们想实现一个Hibernate数据库更新(实际上是一个“插入”操作),它涉及到两个数据库表格(Driver和Car)之间的“一对多”的关系。另外,将通过一个购物车的例子来探讨一下实际开发中的应用程序设计问题。

四、购物车情形讨论

如果不存在例如Hibernate这样的工具可用,或是在一种非Hibernate环境下,那么,你该如何设计这种类型的应用程序呢?以前人们所使用的方法是借助于数据库中的“分段表格”(staging table)(或“临时”表格,也称为“工作”表格)。因此,随着用户操作一系列的屏幕,把每一次回寄发送给服务器,打开一个新的Hibernate会话,执行相应的session.beginTransaction,然后调用一个或多个类似于“保存”这样的方法,最后实现事务提交。仅仅在上面一系列屏幕操作的最后—在业务事务或对话事务的最后—数据才从分段表格传递到永久性表格中;而且,此时才从分段表格中删除相同的数据。

我们认为,上面这种方法,对于Hibernate环境和非Hibernate环境都一样重要,并且使得事情相当简单而且可预测,并且此方法能够移植到任何数据库平台。

一般情况下,在永久性表格及其相应的分段表格结构之间很可能存在一些不同。例如,分段表格往往会包含一个例如Http会话ID这样的表格列,用于标识当前用户会话。而通常这个列是不会出现在永久表格中的。在你的servlet中,你可以通过下列语句来取得Http会话ID:

request.getSession().getId()

这两个表格中的主键—假定它是一个由数据库或Hibernate赋值的代理键—可能具有相同的数据类型或结构,但是却不会有相同的值。注意,在分段表中的主键值仅是一个临时值。

这两个表的记录结构之间还可能存在其它区别,这要由永久表格记录的处理方式来决定。

让我们假定,MySQL数据库中的car表格有可能会在一种multi-Http-request场所下使用,并且还需要一个分段表格。下面是这个分段表格可能的“create table”SQL语句:

create table car_staging(
car_id bigint(20) PRIMARY KEY not null auto_increment,
http_session_id varchar(64),
manufacturer varchar(40),
model varchar(40),
year int,
fk_driver_id bigint(20),
FOREIGN KEY (fk_driver_id) REFERENCES driver (driver_id)
)

car表格相应的create table SQL语句已在上一篇中描述过。这两个SQL语句之间的唯一区别在于:①表格名不同;②在car_staging表格中增加了一个http_session_id列。

下面是相应的Java源文件—Car_staging.java。它与上一篇中的模块Car.java几乎完全相同。

package tomcatJndi;
public class Car_staging
{
private Long car_id;
private String http_session_id;
private String manufacturer;
private String model;
private int year;
public Car() {}
public Long getId() {
return car_id;
}
private void setId(Long car_id) { //注意这里private属性的可见性
this.car_id = car_id;
}
public String getHttp_session_id() {
return http_session_id;
}
public void setHttp_session_id(String http_session_id) {
this.http_session_id = http_session_id;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}

下面是相应的Hibernate映射文件。它与car表格相应的映射文件(上一篇中)也几乎一致。

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

当然,你不一定非用分段表格技术不可。但是,其它一些可选方案的重点也都应集中在分离(detaching)和重新依附(attaching),如何利用Hibernate所提供的锁机制,以及处理其它相关的问题方面。但是,为什么上面的方法更合乎需要呢?它对哪些内容进行了简化?

比方说,在与用户的若干交互过程中,你想从Hibernate会话中提取所有已经保存到其中的对象实例—很明显,此时你很可能会需要一个Iterator或Enumeration这样的工具。但是,你该如何实现呢?我们并不知道。因此,如果你需要对保存在Hibernate会话中的数据实现某种后处理期更新或查询的话;那么,除了你已经把此信息保存到Hibernate会话内以外,你还需要把对这种数据的独立参考保存在Hibernate会话外部。

如果你需要把更新信息存储到Hibernate会话的外部,那么,把此信息存储在Hibernate会话内还有什么意义呢?—此时,你甚至还不能遍历这些信息!因此,我们的意见是,最好是当你准备好提交时才把信息存储在Hibernate会话中。

除了上面的分段表格技术之外,还存在其它广泛使用的技术。例如,你还可以把与长时间运行的事务相关的信息存储在Http会话中(这不同与存储在Hibernate会话中的情形)。然而,如果把大量的数据存储在Http会话中,那么,你的应用程序的灵活性可能会受到影响。另外,服务器一端的簇管理也可能因此而成为问题。

你还可以选择以另外某种方式串行化信息并且把它下载到一个客户端HTML隐藏域中。然而,这个方法有可能导致在服务器和客户端之间来回传递大量的数据,并且你可能还需要采取其它一些措施以确保在浏览器端串行化的信息是安全的。在任何web应用程序中,存在三种如上所描述的支持购物车情形的方法:(1)分段表格技术;(2) 通过Http会话中的属性;(3)在HTML隐藏域内实现的串行化(这可能是极少使用的方法)。在非Hibernate环境下,如果使用当前最流行的web MVC技术—JSF,Spring MVC或Struts进行开发的话,那么,你一定会用到上面所描述的三种方法之一。我们认为,在开发一个基于Hibernate方案的web应用程序时也应该考虑一下上面这三种方法。当然,这要根据存储在活动购物车中信息的数量以及我们上面所列出的其它一些因素进行综合考虑才行。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)



共2页: 上一页 [1] 2
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52371次)
·UML类图详解 (查看46839次)
·Java编程开发手册 (查看25118次)
·UML统一建模语言 (查看24099次)
·C#技术开发指南 (查看22406次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (251个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有