bookStore项目总结

感想

该项目是目前为止,我写过代码量最多的项目了…..虽然清楚是没有含金量的【跟着视频来写的】,但感受本身也在进步中…..sql

写的过程当中,出了很多的问题…..很是多的Servlet,JSP看得眼花…..数据库

如今,想把该项目好好梳理一下要点,因而有了这篇博文….编程

E-R图

该项目涉及到了5个表:user、orders、orderItem、category、bookmarkdown

这里写图片描述

难点

E-R图设计中最难的地方就是作到订单模块那里…..设计

难点一

首先,要明白为何在订单模块中设计Orders和OrderItem表两张表,而不是一张表Orders就搞掂了…固然了,这也可参考购物车案例的设计【Cart、CartItem】code

  • 由于订单模块分了两个部分,一部分是显示普通的订单信息【定单人、价钱、订单时间、订单状态】
  • 而在后台中,咱们还要在显示订单普通讯息时,给予查看详细信息的功能【也就是订单的具体内容:具体的商品价钱、数量】

难点二:

订单模块我是最后才开始写的,订单模块和用户模块、图书模块都有相连,这就复杂了很多….视频

  • 一个用户能够拥有多个订单
  • 一个订单对应多个订单项
  • 一本图书对应多个订单项

难点三:

在实体的设计上,通常地,一对多的关系咱们都是在多的类上使用变量了来记住一的关系。例如:在分类和图书一对多的关系中,我就是在Book类用category_id来记住分类的关系对象

可是呢,在订单和订单项的关系中,这样是行不通的。图片

  • 不能在订单项类上用一个变量来记住订单【咱们在前台生成订单,普通的订单信息能够直接生成。当咱们想查看详细信息时,是不能把订单和订单项链接起来,从而获得订单项的具体信息的】
  • 因此说,当生成订单的时候,也应该把全部订单项也一块儿封装到订单中…所以,咱们这样作:在订单中维护一个Set集合来装载着全部的订单项..
  • 这也有购物车案例的味道【Cart使用Map集合来存储CartItem】….

项目中遇到的要点

  1. 在Tomcat中建立文件夹不能是manager,否则会出现403 Access Denied错误
  2. frameset标签是能够嵌套的,分列用“cols”,分行用“rows”,在src后指定target,后面request跳转显示的页面都是在target指定的页面上
  3. 实现分页主要在Page类上编写代码,在DAO层中要获取总记录数、分页数据。start和end参数是经过currentPage和linesize来计算出来的。
  4. 获取分类后的分页数据,须要在DAO层中获取分类后的总记录数,以分类做为WHERE条件获得分页数据
  5. 提交表单中有上传文件的话,咱们可使用FileUpload组件。普通字段咱们使用BeanUtils的setProperty()来封装数据到Bean对象上,文件咱们就写到服务端的指定目录下
  6. 在分帧页面上,若是首页就要显示数据了,咱们能够在frame标签的src上指定的是Servlet,Servlet再跳转回JSP,这样JSP页面就有数据了!
  7. 若是想要div不全是浮动,咱们能够在后边跟一个清除浮动的div。<div style="clear: both"></div>
  8. 想要页面上的按钮可以完成对应的功能,须要用到JavaScript代码,经过DOM编程获得对应的数据,使用window.location.href,让它跳转到对应的Servlet上实现功能
  9. Cart和CartIem的设计上,CartItem的总价是数量*价钱,Cart的总价是所有CartItem的价钱之和。
  10. Cart应该提供把商品加到购物车的功能,判断该商品的购物项是否存在,不存在着建立并保存在里边。存在则购物项的数量+1
  11. BussinessService提供购买功能,参数是Cart和Book。
  12. 用户想要购买商品时,判断用户是否登录了,还要判断购物车是否存在【购物车使用Session来保存】,不存在则建立。
  13. Mysql中不能将表命名为“order”,这样会出错
  14. 订单的基本信息能够在Cart和User中获取,订单项的基本信息能够在CartItem中获取。所以,在BussinessService中须要Cart【经过Cart就能够找到CartItem了】和User参数。
  15. 在生成订单的Dao中,须要把订单的基本信息,订单项的基本信息封装到数据库中
  16. 经过id查找订单的时候,先找出订单的基本信息订单表和用户表联结,就能够查找出订单的用户。经过id也就能够查找出订单中全部的订单项了。最后把查找出来的数据所有封装到订单对象上。
  17. 想要让未发货的订单变成已发货,其实就是更新订单的状态。获得未发货的所有订单和已发货的所有订单,其实就是检索出不一样状态的所有订单
  18. Dao层中,咱们须要的参数每每是单一的,要么是具体的对象,要么就是id…然而在Service层中,咱们要的参数是与该实体类相连的
    • 例子1:在生成订单的时候,Dao层仅仅须要Order对象参数。在Service层中,Order须要把User、Cart的数据封装到Order对象中,因而就须要了这两个参数
    • 例子2:Cart提供了把商品添加到购物车的功能,参数只须要具体商品的id。而在Service中,它须要用户的购物车对象和具体商品的id。
相关文章
相关标签/搜索