




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 开始J2EE开发之旅3.1 网上书店概述3.2 数据库设计3.3 系统结构 3.4 搭建系统框架 3.1 网上书店概述任何软件开发的第一步就是明确系统需求,即要知道系统要实现什么功能,具体的要求是什么,如果这些都没有弄明白,开发出来的系统肯定是不合格的。大部分读者都有过网上购物的经历,在购物网站可以很方便的注册、浏览商品,查询商品购买时只需点几下鼠标。本书的网上书店实现了上述的基本功能,用户可以在网上书店进行注册,浏览商品以及查询购物车。主要的界面如图3-1所示。图3-1 网上书店首页3.1 网上书店概述用户可以浏览图书分类和推荐的图书;用户可以根据分类,浏览某一类的图书列表;用户可以
2、查看具体一本图书的介绍;用户在图书浏览页面,点击添加,把选定图书添加到购物车中;用户可以点击购物车,查看购物车信息;用户可以点击结帐按钮下订单,但是需要登录后才能进行;用户在注册页面,填写注册信息,确认有效注册称为新用户;用户在登录页面,填写用户名和密码,确认正确以后可以结帐。功能模块划分如图3-2所示。网上书店登录注销注册浏览目录浏览图书购物查看购物车结帐图3-2 功能模块划分3.2 数据库设计3.2.1 设计概念数据模型1. 设计概念数据模型网上商店中有以下几个实体:用户、图书分类、图书、订单、订单项目,因此,系统可以设计如下的数据概念模型:图3-3 数据概念模型3.2.1 设计概念数据模
3、型用户:代表一个用户实体,主要包括用户信息,如用户名、密码、性别、年龄等。图书分类:代表网上书店中已有的图书种类,如:计算机、少儿、生活等。图书:代表具体图书的具体信息,如图书名,价格和封面图片等等。订单:代表用户的订单,购买信息。订单项:代表订单中具体项,每一个订单的具体订单信息。其中实体之间还可能存在对应关系。图书分类和图书:一个图书类别中有多个图书,一个图书属于一个图书分类,是一对多的关系。用户和订单:一个用户可以拥有多个订单,一个订单只能属于一个用户,它们之间的关系是一对多的关系,在数据库中表现为订单表中有一个用户表的外键。订单和订单项:一个订单中包含多个订单项,一个订单项只能属于一个
4、订单,是一对多的关系。图书和订单项:一个订单项就是对图书的封装,订单项中除了有这个商品的信息,还有这个商品的购买数量等。3.2.1 设计概念数据模型2. 用PowerDesigner创建数据概念模型主要步骤步骤1:创建概念模型项目步骤2:创建用户实体步骤3:创建图书分类实体步骤4:创建图书实体步骤5:创建订单实体步骤6:创建订单项目实体步骤7:创建实体之间的关联步骤1 打开PowerDesigner,选择菜单新建ConceptualM 图3-4 新建ConceptualDataModel3.2.1 设计概念数据模型 步骤2 创建“用户”实体在PowerDesigner中主要用到如图3-5所示的
5、工具栏中的工具,用于创建实体和创建关联。创建概念模型实体创建实体之间的关联图3-5 工具栏3.2.1 设计概念数据模型点击工具,创建一个实体。双击创建的实体,出现如图3-6所示的对话框,用于编辑实体的属性。修改实体的名称,如图3-6所示。图3-6 修改实体名称3.2.1 设计概念数据模型 在对话框中,切换到“属性”标签,添加用户实体的属性。如图3-7所示。图3-7 添加实体属性3.2.1 设计概念数据模型步骤3 创建图书分类实体创建实体,为实体命名,如图3-8所示。图3-8 修改实体名称3.2.1 设计概念数据模型切换到属性标签,添加如图3-9所示属性。图3-9 添加实体属性3.2.1 设计概
6、念数据模型 步骤4 创建图书实体创建实体,为实体命名,如图3-10所示。图3-10 修改实体名称3.2.1 设计概念数据模型切换到属性标签,添加如图3-11所示属性图3-11 添加实体属性3.2.1 设计概念数据模型步骤5 创建订单实体创建实体,为实体命名,如图3-12所示。图3-12 修改实体名称3.2.1 设计概念数据模型切换到属性标签,添加如图3-13所示属性。图3-13 添加实体属性3.2.1 设计概念数据模型步骤6 创建订单项实体创建实体,为实体命名,如图3-14所示图3-14 修改实体名称3.2.1 设计概念数据模型切换到属性标签,添加如图3-15所示属性。图3-15 添加实体属性
7、 3.2.1 设计概念数据模型步骤7 添加实体之间的关系按照图3-3所示,添加实体之间的关系。用户和订单之间是一对多关系。图书分类与图书是一对多关系。订单和订单项是一对多关系。图书和订单项是一对多关系。3.2.2 生成物理数据模型在PowerDesigner中,选择菜单ToolsGenerate Physical Data Model,按图3-16所示配置,由PowerDesigner自动创建相应数据库的物理模型。图3-16 创建物理数据模型3.2.2 生成物理数据模型 点击“确定”,系统自动生成如图3-17所示的物理数据模型。图3-17 生成物理数据模型3.2.3 生成数据库通过物理模型,生
8、成SQL语句。选择菜单DatabaseGenerate Database,出现如图3-18所示对话框,选择SQL语句的保存路径和名称,PowerDesigner自动根据物理模型生成SQL语句。图3-18 生成数据库由于实体id是数据库自动增长型的,所以需要修改自动生成的MySQL语句,为每一个添加一个auto_increment关键字。如下所示,修改生成的sql文件。3.2.4 在MYSQL中创建数据库和表 打开MySQL数据库,输入密码。创建一个名为bookstore的数据库,执行PowerDesigner生成的SQL语句,生成数据库表。(假设SQL文件的存放路径是e:/book/books
9、tore.sql)。Enter password:(输入密码);mysqlcreate database bookstore;mysqlsource e:/book/bookstore.sql;最后生成的数据库和数据库表如图3-19所示。图3-19 创建好的数据库3.3 系统结构3.3.1 项目包的命名一般在J2EE企业开发中,项目的命名有个默认的做法:类型.公司.项目.功能模块。例如:,其中,org代表包的类型是开源组织,apache是组织或团体的名称,log4j是项目名称,net就是某个功能模块了。又如:com.mysql.jdbc.log,com代表包的类型是商业的,mysql是mysq
10、l公司简称,jdbc就是mysql公司jdbc驱动项目名称,log就是日志功能模块。因此,假设本书开发的系统机构名称是apex,bookstore为商业应用,项目就可以这样命名:org.apex.bookstore。同样,如果apex机构以后要开发新的项目,如短信客户关系管理系统,那么此项目就命名为org.apex.bookstore,这样打开org.apex这个包,公司的项目就一目了然了。3.3.2功能模块包的划分在确定了项目包的命名后,要考虑对应的功能模块划分。根据项目的特点和部署的要求,功能模块的划分方式也有很多种,常见的有两种方式: 按照应用系统的功能模块直接划分。 把应用系统按照J2
11、EE体系结构的3层划分表示层,业务逻辑层和数据持久层划分。1按照应用系统的功能模块直接划分按照应用系统的功能模块直接划分,在每个功能模块下面根据软件开发逻辑层(表示层、业务逻辑层和数据持久层)划分。例如一个网上书店项目bookstore有四个相对独立的功能模块login(登录)、browse(浏览)、search(搜索图书)、cart(购物车)、account(结帐)。应用此方法可以划分为如图3-20所示。图3-20 按照功能模块划分包3.3.2功能模块包的划分项目划分为account、browse、cart、login、search五个相对独立的功能模块。每个功能模块下,又按照J2EE的逻辑
12、3层来划分,business业务逻辑层、persistence数据持久层、presentation表示层。各个层的具体实现代码分别存放在对应的包中。这样划分的好处是各个功能模块很独立,也便于维护管理,但是它的部署的灵活性就受到很大的约束,它基本上都是以每个功能模块为发布单元的。如果应用需要整个系统的表示层和业务逻辑层分开,例如,account、brose、cart、login和search各个模块中的presentation包部署到Tomcat Web容器里,business和persitence包部署到JBoss EJB容器里。这时,按这种方式划分的应用就变得不是很直观了。2把应用系统按照J
13、2EE体系结构的3层划分表示层、业务逻辑层和数据持久层划分把应用系统按照J2EE体系结构的3层划分表示层,业务逻辑层和数据持久层划分,然后,在对应的每一个逻辑层下面再按照系统功能能模块划分,按照这种方式,bookstore应用结构就可以划分如图3-21所示。3.3.2功能模块包的划分图3-21 按照三层结构划分包如图3-21所示,bookstore按照J2EE三层体系结构,把业务应用包划分为:presentation:表示层代码包,在这个包里包括了bookstore应用所有的表示层代码。business:业务逻辑层代码包,在此包里面包含了bookstore所有的业务逻辑代码。而这些业务逻辑代码
14、的归类是根据bookstore应用的功能模块来划分的。例如,根据业务功能模块的定义,business包下面又包括了account、browse、cart、login、search五个功能模块包。3.3.2功能模块包的划分persistence:数据持久层代码包。顾名思义,在这个包里面包含了bookstore所有的数据源访问代码。在这些代码中不能包括业务逻辑,必须为一个数据访问接口。如果应用DAO模式的话,那么此包就是存在一个DAO对象的地方。valueobject:值对象包,在应用系统中,往往定义了各种纯的值对象来封装系统的一个个实体,如对数据库实体表的封装的dto值对象等等。而这些值对象是系
15、统中各种逻辑层都要用到的共同对象,所以,为了便于管理和引用,专门把这些对象归结到valueobject包。util:工具包,在一个项目中,有些类是公共的,它为每一个包所调用。例如,一些系统常量定义类、通用工具类等等。把这些类统一存放在util包中,便于维护和重用,也有利于发布。可见这种划分的好处就是和J2EE体系结构思想一致,层次结构很清晰。每一层都是通过相关的接口隔离,从而解耦开来。每一层都是独立开发,便于项目软件工程师的管理。而且,按这种方式划分的系统,其部署是十分灵活的,缩放性很强。理论上,随时可以根据需要来各自独立部署各个逻辑层。按照常见的一个情形是:Web表示层包presentati
16、on部署在多个不同物理机器Tomcat容器上,而业务逻辑和数据持久层business和persistence包只部署在一台JBoss物理机器里面。3.3.2功能模块包的划分这些包的依赖关系如图3-22所示presentationbusinessutilvalueobjectpersistence图3-22 包的依赖关系3.3.2功能模块包的划分util和valueobject两个包为3个层次所依赖,因为它们是公共的。表示层presentation包依赖业务逻辑层business包,而business包又依赖于数据持久层包persistence包。这都是和J2EE三层的体系结构一致的。在网络书店
17、系统中,用了轻量级框架struts 2、Hibernate、Spring,并且系统不算大,将这个应用系统的包分为如图3-23所示。图3-23 bookstore包的划分3.3.2功能模块包的划分其中:action对应presentation包。dao使用DAO模式,对应persistence包。model是模型包。service对应business层,表示的是业务逻辑。test用于测试。util工具包。vo即value object。3.4 搭建系统框架主要步骤如下:步骤1:创建Web Project步骤2:创建包步骤3:修改web.xml,添加struts.xml文件步骤4:加载用户自定义包
18、,修改web.xml,添加perties文件步骤5:加载Hibernate框架步骤6:对数据库表进行反向工程,生成映射文件具体的操作如下:步骤1 在MyEclipse中创建新的Web Project,名字为bookstore。步骤2 创建包创建如图3-24所示包。图3-24 项目主要包3.4 搭建系统框架步骤3修改web.xml,代码如下: struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* 在src下添加struts.xml文件,内容如下: 3.4 搭建系统框架步骤4 加载用户自定义包hiberante3创建新的
19、applicationContext.xml文件,存放在WebRoot/WEB-INF目录下。修改web.xml的代码如下: struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* org.springframework.web.context.ContextLoaderListener 3.4 搭建系统框架在src下添加perites文件,增加对Spring的支持。代码如下:struts.objectFactory=spring步骤5 添加Hibernate框架添加Hibernate类库,将Hibernate的配置信息存放在Spring配置文件applicationContext.xml中。不新建Spring配置文件,为SessionFactory ID起名为sessionFactory,选择数据源驱动为mysql,数据源ID起名dataSource,不创建SessionFactory类。步骤6 反向工程,添加映射文件在MyEclipse中切换到MyEclipse Database Explorer视窗,选中五个创建好的表,右击菜单“Hibernate Reverse Enginerring”,利用反向工程,将对应的Java类和映射文件放在org.bookst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论