收藏 分享(赏)

基于Hibemate技术的网上书店开发.doc

上传人:HR专家 文档编号:11471432 上传时间:2020-05-09 格式:DOC 页数:12 大小:463KB
下载 相关 举报
基于Hibemate技术的网上书店开发.doc_第1页
第1页 / 共12页
基于Hibemate技术的网上书店开发.doc_第2页
第2页 / 共12页
基于Hibemate技术的网上书店开发.doc_第3页
第3页 / 共12页
基于Hibemate技术的网上书店开发.doc_第4页
第4页 / 共12页
基于Hibemate技术的网上书店开发.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、基于Hibemate技术的网上书店开发摘要:随着计算机和网络技术的日新月异,对于复杂多变的应用环境,开发伸缩性强、扩展性好、重用性高和易维护、易管理的web应用是当前研web技术发展的热点之一。本文在分析研究web应用开发技术的扩展性、重用性和维护性等问题的基础上,整合了Struts框架和Hibemate技术,构建了一个Struts+Hibemate架构模型,它具有结构灵活、易于维护、扩展性好等优点,以此为基础,探讨了基于struts+hibemate架构的网上书店系统开发。关键词:oracle Struts Hibemate技术 网上书店 1 绪论电子商务(Electronic Commer

2、ce)的定义:以电子及电子技术为手段,以商务为核心,把原来传统的销售、购物渠道移到互联网上来,打破国家与地区有形无形的壁垒,使生产企业达到全球化,网络化,无形化,个性化、一体化。 电子商务是运用数字信息技术,对企业的各项活动进行持续优化的过程。电子商务涵盖 的范围很广,一般可分为企业对企业(Business-to-Business),或企业对消费者(Business-to-Consumer)两种。另外还有消费者对消费(Consumer-to-Consumer)这种大步增长的模式。随着国内Internet使用人数的增加,利用Internet进行网络购物并以银行卡付款的消费方式已渐流行,市场份额也

3、在迅速增长,电子商务网站也层出不穷。电子商务最常见之安全机制有SSL(安全套接层协议)及SET(安全电子交易协议)两种。 网上书店顾名思义,网站式的书店。是一种高质量,更快捷,更方便的购书方式。网上书店不仅可用于图书的在线销售,也有音碟、影碟的在线销售。而且网站式的书店对图书的管理更加合理化,信息化。售书的同时还具有书籍类商品管理、购物车、订单管理、会员管理等功能,非常灵活的网站内容和文章管理功能。但网上书店的真实性是消费者的最大顾虑,这也是网上书店还不被大多数消费者所接受的原因之一。网上书店和现实书店区别比较(1):网上书店涉及范围广,经营成本低,(2):网上书店信用度如果低,影响生意(3)

4、:现实书店直观,信用度高。(4):现实书店涉及范围有限,经营成本高现在有部分现实书店已经开始从网上书店进货了。总之网上书店在现实生活中已成为消费者选择的一部分本系统是基于B2C模式的网上书店购物系统。在网上书城买书,可以更快捷的查到所买图书的更多信息,它有它独特的售书方式和功能。如用户注册会员功能等,会员类型有:高级会员、金牌会员等。有的网上书城有会员积分设置,如达到一定积分时自动成为高级会员,高级会员会有优惠和特别的服务。还有就是支付方式了,一般网上书店都有三种类型的支付方式:汇款类支付、在线支付、其他支付方式,其中在线支付只要到支付平台开户后,将所获开户信息填入即可。当在网上书城购书后,用

5、户所购图书都在网站上有记录,方便用户查询。只愿为您提供更方便、快捷的生活方式。2 MVC概述MVC(模型一视图一控制,model-view-control,简称MVC)是一种目前广泛流行的软件设计模式,早在70年代,IBM就推出了Sanfronscisico项目计划,其实就是MVC设计模式的研究241。近来,随着J2EE的成熟,它正在成为在J2EE平台上推荐的一种设计模型,MVC主要适用于交互式的Web应用,尤其是存在大量页面、多次客户访问及数据显示的应用。MVC体系结构有效地在存储和展示数据的对象中区分功能模块以降低它们之间的连接度,这种体系结构将传统的输入、处理和输出模型转化为图形显示的用

6、户交互模型,或者换一种说法,是多层次的w曲商业应用;MVC体系结构具有三个层面:模型(Model)、视图(View)和控制(Controller),每个层面有其各自的功能作用。模型层是应用程序的主体部分,它负责表达和访问商业数据,执行商业逻辑和操作。也就是说,这一层就是现实生活中功能的软件模拟;在模型层变化的时候,它将通知视图层并提供后者访问自身状态的能力,同时控制层也可以访问其功能函数以完成相关的任务。视图层是应用程序中负责生成用户界面的部分,主要负责显示模型层的内容。它从模型层取得数据并指定这些数据如何被显示出来。在模型层变化的时候,它将自动更新。另外视图层也会将用户的输入传送给控制器。控

7、制层是根据用户的输入,控制用户界匝数据显示及更新Model对象状态的部分,主要负责定义应用程序的行为。它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作;在一个图形界面中,常见的用户输入包括点击按钮和菜单选择。在Web应用中,它包括对Web层的GET和POST的请求:控制层可以基于用户的交互和模型层的操作结果来选择下一个可以显示的视图,一个应用程序通常会基于一组相关功能设定一个控制层的模块,甚至一些应用程序会根据不同的用户类型具有不同的控制层设定,这主要是由于不同用户的视图交互和选择也是不同的。在模型层、视图层和控制层之间划分责任可以减少

8、代码的重复度,并使应用程序维护起来更加简单。同时由于数据和业务逻辑的分开,在新的数据源加入和数据显示变化的时候,数据处理也会变得更简单。总之,MVC处理过程就是,首先用户在视图提供的界面上发出请求,视图把请求转发给控制器,控制器调用相应的模型来处理用户请求,模型进行相应的业务逻辑处理,并返回数据。最后控制器调用相应的视图来显示模型返回的数据。在本系统中采用Struts构建的MVC框架。3 ORM概述对象关系映射(Object Relational Mapping,简称ORM)是持久化设计中最重要最核心的关键技术。ORM能将程序中的对象自动持久化到关系数据库中。对象和关系数据是业务实体的两种表现

9、形式,业务实体在内存中表现为对象,在数据库中表现为关系数据,内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系,所以,从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的面向对象与从数学理论发展而来的关系数据库之间有着明显区别和不匹配。因此,对象/关系映射技术应运而生,该技术一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。实质上,引入ORM后,一个O/R Mapping会自动生成数据库访问语句,当用O/R Mapping保存,删除,读取对象时,O/R Mapping负责生成SQL,我们只需要关心对象就可以了。ORM是一种为了解决面向

10、对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对

11、象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。 面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。4 Jsp概述J

12、SP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。 JSP与Java Servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,

13、因此客户端只要有浏览器就能浏览。 JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。 JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。Java Servlet 是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。 自JSP推出后,众多大公司都

14、支持JSP技术的服务器,如IBM、Oracle、Bea公司等,所以JSP迅速成为商业应用的服务器端语言。5 Hibernate概述Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate的核心接口一共有5个,分别为:Session、Sessi

15、onFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户

16、session。 SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。 Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactor

17、y对象。 Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。 Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。4 网上书店详细设计过程4.1 需求分析网上书城系统主要是实现网上选书、购书、产生订单等功能的系统。一个典型的网上书城一般都需要实现图书信息的动态展示,购物车管理、客户信息注册,登陆管理、订单处理、报表管理等模块。根据网上书城的基本需求,本系统需要完成的具体任务有图书查询、购物车管理、订单处理、会员注册等功能。由于篇幅的限制,本文在需求分析中就不做具体的详细介绍,下面是本系统的框

18、架图4.2系统框架图与数据库书籍管理订单管理报表管理采购管理客户管理管理员管理网上书店管理系统4.3 本系统的结构与我在系统所做的模块我在系统设计过程中承担的任务主要是订单管理的设计,包括如下内容:订单的插入。订单的修改。订单的关闭。订单的删除。列表管理。4.4 主要源代码(1)主程序:import com.px1987.bookshop.dao.actionForm.Order;public class OrderImpl Connection con=null;ResultSet rs=null;PreparedStatement pst;ConnDBpl comdb = new Conn

19、DBpl();public OrderImpl() (2)订单插入代码:/订单插入public boolean insertOrder(Order order) PreparedStatement pstmt=null;con = comdb.getConnection();int returnResult=0;String sssq = ;Random rm = new Random();/获取随机数int a=0;int tempq = 0;boolean flag = false;a = Math.abs(rm.nextInt(10000);/保证取得的是正整数String sql=in

20、sert into bookOrder values(?,?,?,?,?,?,?,?,?);try pstmt=con.prepareStatement(sql);pstmt.setInt(1, a);sssq = order.getUserId();pstmt.setString(2,order.getUserId();sssq = order.getUserAccount();pstmt.setString(3,order.getUserAccount();tempq = order.getBookId();pstmt.setInt(4,order.getBookId();sssq = o

21、rder.getBookName();pstmt.setString(5,order.getBookName();sssq = new java.sql.Date(new java.util.Date().getTime().toString();pstmt.setDate(6,new java.sql.Date(new java.util.Date().getTime();sssq = new java.sql.Date(0).toString();pstmt.setDate(7,new java.sql.Date(0);sssq = order.getFaHuoAdress();pstmt

22、.setString(8,order.getFaHuoAdress();tempq = order.getFaHuoState();pstmt.setInt(9,order.getFaHuoState();returnResult = pstmt.executeUpdate();if(returnResult!=0)flag = true; else flag = false; catch (SQLException e) finallyreturn flag;public List selectAllOrder() List list=new ArrayList();Connection c

23、on=null;String sql=select * from bookOrder;con = comdb.getConnection();trytry PreparedStatement pst=con.prepareStatement(sql);ResultSet rs=pst.executeQuery();while(rs.next()Order order=new Order();order.setBookId(rs.getInt(bookId);order.setBookName(rs.getString(bookName);order.setFaHuoAdress(rs.getS

24、tring(faHuoAddress);order.setFaHuoState(rs.getInt(faHuoState);order.setFaHuoTime(rs.getDate(faHuoTime);order.setOrderTime(rs.getDate(orderTime);order.setUserAccount(rs.getString(userAccount);order.setUserId(rs.getString(userId);list.add(order); catch (SQLException e) finallyreturn list;(3)根据状态来查询未处理

25、的订单:/根据状态来查询未处理的order。public List selectNewOrder() throws SQLException List list=new ArrayList();Connection con=null;String sql=select * from bookOrder where faHuoState = 0;con = comdb.getConnection(); trytry PreparedStatement pst=con.prepareStatement(sql);ResultSet rs=pst.executeQuery();while(rs.ne

26、xt()Order order=new Order();order.setId(rs.getInt(Id);order.setBookId(rs.getInt(bookId);order.setBookName(rs.getString(bookName);order.setFaHuoAdress(rs.getString(faHuoAddress);order.setFaHuoState(rs.getInt(faHuoState);order.setFaHuoTime(rs.getDate(faHuoTime);order.setOrderTime(rs.getDate(orderTime)

27、;order.setUserAccount(rs.getString(userAccount);order.setUserId(rs.getString(userId);list.add(order);con.close(); catch (SQLException e) finallycon.close();return list;(4)根据bookId来查询未处理的订单:/根据bookId查询order。public Order selectOrderByBookId(int bookId) throws SQLException Order order=null;Connection c

28、on=null;String sql=select * from bookOrder where bookId = +bookId;con = comdb.getConnection();trytry PreparedStatement pst=con.prepareStatement(sql);ResultSet rs=pst.executeQuery();while(rs.next()order=new Order();order.setId(rs.getInt(Id);order.setBookId(rs.getInt(bookId);order.setBookName(rs.getSt

29、ring(bookName);order.setFaHuoAdress(rs.getString(faHuoAddress);order.setFaHuoState(rs.getInt(faHuoState);order.setFaHuoTime(rs.getDate(faHuoTime);order.setOrderTime(rs.getDate(orderTime);order.setUserAccount(rs.getString(userAccount);order.setUserId(rs.getString(userId); catch (SQLException e) final

30、lycon.close();return order;(5)根据userid来查询未处理的订单:/根据userid查询订单orderpublic List selectOrderByUserId(String userId) throws SQLException List list=new ArrayList();Connection con=null;String sql=select * from bookOrder where userId = +userId;con = comdb.getConnection();trytry PreparedStatement pst=con.pr

31、epareStatement(sql);ResultSet rs=pst.executeQuery();while(rs.next()Order order=new Order();order.setId(rs.getInt(Id);order.setBookId(rs.getInt(bookId);order.setBookName(rs.getString(bookName);order.setFaHuoAdress(rs.getString(faHuoAddress);order.setFaHuoState(rs.getInt(faHuoState);order.setFaHuoTime

32、(rs.getDate(faHuoTime);order.setOrderTime(rs.getDate(orderTime);order.setUserAccount(rs.getString(userAccount);order.setUserId(rs.getString(userId);list.add(order); catch (SQLException e) finallycon.close();return list;(6)判断是否发货:/已发货的时候这个faHuoState值为大于0,没有发货的话是0;public void updateFaHuoState(int orde

33、rId) throws SQLException Connection con=null;String sql=update bookOrder set faHuoState = + 1+ where Id= +orderId;con = comdb.getConnection();try PreparedStatement pst=con.prepareStatement(sql);int rs=pst.executeUpdate(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();fi

34、nallycon.close();4.5 实现效果(1)订单页面 我们网上购书的时候,主界面如下图:(2)当我们选择好一本书之后,提交订单,效果如下图:(3)下图是付款界面5 总结Struts作为J2EE下一种构建Web应用的框架,既具备了MVC模式的优点,又运用了J2EE中的JSPServlet技术,为开发Web应用提供了一种最佳选择。同时,用户界面、业务过程、业务逻辑和业务控制的分离,使得程序开发者能够很好地协调,开发过程更为简洁。同时,利用ActionServlet配合Struts-config.xml实现对整个系统导航,使得系统脉络更加清晰,既增强了开发人员对系统的整体把握,又提高了系

35、统的可维护性和可扩充性。但是本系统还需要更进一步的去精益求精,因为高效精炼的代码不是一蹴而就的,只有一步一步的去完善,去改进才能更完美,同时中文的乱码和Jsp中的分页始终是java中的一个重要的问题,所以我们需要更努力的完善。参考文献:1陶以政,吴志杰,唐定勇等.基于J2EE的应用框架技术研究J.计算机工程与设计,2007,28(4):pp8262SUN Microsystem Corporation.Java Technology Java 2 Platform,Enterprise Edition(J2EE)Enterprise Application ModelEBOL.http:/ M

36、icrosystem CorporationThe J2EE TutorialEB/OL.http:/ 25(1):pp2166朱庆生,葛亮.新一代Web应用框架JSFJ.计算机科学,2005,32(7):pp2257张国梁.基于Struts和Hibernate的J2EE Web应用的研究与实现Dissertation.华东师范大学,2006.pp11-148敬宗儒,余青松,周云.基于Struts与JSF的J2EE集成开发模式的应用研究J计算机技术与发展,2007,17(3):pp214-2159苗晓辉.基于J2EE的数据持久化的研究与实现J.计算机工程,2007,33(5):pp27210余俊新,孙涌.J2EE中对象关系映射的研究与实现J.计算机技术与发展,2007,17(3):pp9011潘轶菁,丁岳伟等.对象关系数据库系统模型及映射规则J.上海理工大学学报,2006,28(2):pp174-17512蒋科,郑有才.面向对象技术中OR映射框架的研究与应用J.计算机技术与发展,2007,17(2):pp6213陈丽冰.基于J2EE的Web应用系统的性能优化方法研究J.计算机科学,2006,33(7):pp97

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报