zoukankan      html  css  js  c++  java
  • bookStore项目总结

    感想

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

    写的过程中,出了不少的问题…..非常多的Servlet,JSP看得眼花…..

    现在,想把该项目好好梳理一下要点,于是有了这篇博文….

    E-R图

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

    这里写图片描述

    难点

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

    难点一

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

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

    难点二:

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

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

    难点三:

    在实体的设计上,一般地,一对多的关系我们都是在多的类上使用变量了来记住一的关系。例如:在分类和图书一对多的关系中,我就是在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。
    如果您觉得这篇文章帮助到了您,可以给作者一点鼓励



  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/zhong-fucheng/p/7203002.html
Copyright © 2011-2022 走看看