图书管理系统【总结】

感想

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

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

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

E-R图

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

难点

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

难点一

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

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

难点二:

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

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

难点三:

  • 在一对多和多对一的情况下,我们在考虑需不需要使用一方来维护另一方的时候。在原则上,我们都是使用多的一方来维护一的一方。
  • 那为什么有的时候,上面这句话就不成立了呢??是这样子的:当我们一的方在页面展示的时候,多的一方数据需要同时展示。此时,我们就需要在一的一方使用集合来维护多的一方了。比如:我们查看订单的时候,就肯定需要同时把所有的订单项都查询出来的。当查看购物车的时候,就肯定需要同时把购物项查询出来的
  • 而我们的分类与书籍就没有同时这个概念。在页面上,我们是点击分类,才需要把书籍查询出来。因此,我们是使用多的一方来维护一的一方。
  • 如果使用了一的一方来维护多的一方的话,那么一般都没必要在多的一方来使用变量来维护一的一方了[参照订单与订单项] Ps: 如果这部分有错的地方请指出,谢谢!

项目中遇到的要点

  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。

原文发布于微信公众号 - Java3y(gh_085b56c42174)

原文发表时间:2018-02-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客猴

爬取网易云音乐精彩评论

故事的小黄花 从出生那年就飘着 童年的荡秋千 随记忆一直晃到现在 Re So So Si Do Si La So La Si Si Si Si La Si L...

12220
来自专栏Java社区

前后端数据对接的思考及总结

86230
来自专栏编程

三种主流Web架构

往期精选 做WEB好几年了,各种语言和技术都稍有涉猎。今天心血来潮,突然想总结一下。其实不论什么技术,什么需求,通常WEB开发就是通过WEB前端管理一个或大或小...

82170
来自专栏游戏杂谈

【转】Android开发在路上:少去踩坑,多走捷径

本文是我订阅“腾讯大讲堂”公众帐号时,他们推送的一篇文章,但在腾讯大讲堂官网上我并没有找到这篇文章,不过其它专门“爬”公众号文章的网站倒是有。我觉得写的很不错。...

13130
来自专栏Flutter入门到实战

深入理解什么是RESTful API ?

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。   这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(hi...

2K20
来自专栏AI2ML人工智能to机器学习

Shiny: R语言来建立开源交互式数据分析微服务的神器

先来说个应用场景: 假设你需要快速Prototype一个数据分析的服务, 而且需要给业务客户一定的自由度来理解数据分析的强大, 例如更换数据, 更换分析手段。 ...

26730
来自专栏Golang语言社区

谈谈go语言编程的并发安全

问题起因 在分布式存储开源项目 Weed-FS 中, 我发现了一个地方非并发安全(not concurrency-safety), 所以提交了一个 Weed-F...

46960
来自专栏数据和云

经典文档:Oracle Database 12.2新特性概览解读下载

在2017 OOW大会上,关于Oracle Database 12.2 数据库的新特性介绍仍然引人瞩目,会后公布了 Oracle VP Swonger的文档,我...

33470
来自专栏CSDN技术头条

皮一下,给自己做个打卡系统

2018 年微信小程序开发者逐渐多了起来,微信平台也推出了很多红利,鼓励开发者参与到小程序开发中。

75150
来自专栏刘望舒

Android 模块化之路 模块间通信

55920

扫码关注云+社区

领取腾讯云代金券