摘要:存在则购物项的数量提供购买功能,参数是和。用户想要购买商品时,判断用户是否登陆了,还要判断购物车是否存在购物车使用来保存,不存在则创建。得到未发货的全部订单和已发货的全部订单,其实就是检索出不同状态的全部订单。
感想
该项目是目前为止,我写过代码量最多的项目了.....虽然清楚是没有含金量的【跟着视频来写的】,但感觉自己也在进步中......
写的过程中,出了不少的问题.....非常多的Servlet,JSP看得眼花.....
现在,想把该项目好好梳理一下要点,于是有了这篇博文....
E-R图该项目涉及到了5个表:user、orders、orderItem、category、book
难点E-R图设计中最难的地方就是做到订单模块那里.....
难点一首先,要明白为什么在订单模块中设计Orders和OrderItem表两张表,而不是一张表Orders就搞掂了...当然了,这也可参考购物车案例的设计【Cart、CartItem】
因为订单模块分了两个部分,一部分是显示普通的订单信息【定单人、价钱、订单时间、订单状态】
而在后台中,我们还要在显示订单普通信息时,给予查看详细信息的功能【也就是订单的具体内容:具体的商品价钱、数量】
难点二:订单模块我是最后才开始写的,订单模块和用户模块、图书模块都有相连,这就复杂了不少....
一个用户可以拥有多个订单
一个订单对应多个订单项
一本图书对应多个订单项
难点三:在一对多和多对一的情况下,我们在考虑需不需要使用一方来维护另一方的时候。在原则上,我们都是使用多的一方来维护一的一方。
那为什么有的时候,上面这句话就不成立了呢??是这样子的:当我们一的方在页面展示的时候,多的一方数据需要同时展示。此时,我们就需要在一的一方使用集合来维护多的一方了。比如:我们查看订单的时候,就肯定需要同时把所有的订单项都查询出来的。当查看购物车的时候,就肯定需要同时把购物项查询出来的
而我们的分类与书籍就没有同时这个概念。在页面上,我们是点击分类,才需要把书籍查询出来。因此,我们是使用多的一方来维护一的一方。
如果使用了一的一方来维护多的一方的话,那么一般都没必要在多的一方来使用变量来维护一的一方了[参照订单与订单项]
Ps: 如果这部分有错的地方请指出,谢谢!
项目中遇到的要点在Tomcat中创建文件夹不能是manager,不然会出现403 Access Denied错误
frameset标签是可以嵌套的,分列用“cols”,分行用“rows”,在src后指定target,后面request跳转显示的页面都是在target指定的页面上
实现分页主要在Page类上编写代码,在DAO层中要获取总记录数、分页数据。start和end参数是通过currentPage和linesize来计算出来的。
获取分类后的分页数据,需要在DAO层中获取分类后的总记录数,以分类作为WHERE条件得到分页数据
提交表单中有上传文件的话,我们可以使用FileUpload组件。普通字段我们使用BeanUtils的setProperty()来封装数据到Bean对象上,文件我们就写到服务端的指定目录下
在分帧页面上,如果首页就要显示数据了,我们可以在frame标签的src上指定的是Servlet,Servlet再跳转回JSP,这样JSP页面就有数据了!
如果想要div不全是浮动,我们可以在后边跟一个清除浮动的div。
想要页面上的按钮能够完成对应的功能,需要用到JavaScript代码,通过DOM编程得到对应的数据,使用window.location.href,让它跳转到对应的Servlet上实现功能
Cart和CartIem的设计上,CartItem的总价是数量*价钱,Cart的总价是全部CartItem的价钱之和。
Cart应该提供把商品加到购物车的功能,判断该商品的购物项是否存在,不存在着创建并保存在里边。存在则购物项的数量+1
BussinessService提供购买功能,参数是Cart和Book。
用户想要购买商品时,判断用户是否登陆了,还要判断购物车是否存在【购物车使用Session来保存】,不存在则创建。
Mysql中不能将表命名为“order”,这样会出错
订单的基本信息可以在Cart和User中获取,订单项的基本信息可以在CartItem中获取。因此,在BussinessService中需要Cart【通过Cart就可以找到CartItem了】和User参数。
在生成订单的Dao中,需要把订单的基本信息,订单项的基本信息封装到数据库中
通过id查找订单的时候,先找出订单的基本信息。订单表和用户表联结,就可以查找出订单的用户。通过id也就可以查找出订单中所有的订单项了。最后把查找出来的数据全部封装到订单对象上。
想要让未发货的订单变成已发货,其实就是更新订单的状态。得到未发货的全部订单和已发货的全部订单,其实就是检索出不同状态的全部订单。
在Dao层中,我们需要的参数往往是单一的,要么是具体的对象,要么就是id...然而在Service层中,我们要的参数是与该实体类相连的。
例子1:在生成订单的时候,Dao层仅仅需要Order对象参数。在Service层中,Order需要把User、Cart的数据封装到Order对象中,于是就需要了这两个参数。
例子2:Cart提供了把商品添加到购物车的功能,参数只需要具体商品的id。而在Service中,它需要用户的购物车对象和具体商品的id。
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/68603.html
摘要:前言巩固开发模式,做一个比较完整的小项目成果图该项目包含了两个部分,前台和后台。前台用于显示后台用于管理该项目可分为个模块来组成分类模块,用户模块,图书模块,购买模块,订单模块。 前言 巩固Servlet+JSP开发模式,做一个比较完整的小项目. 成果图 该项目包含了两个部分,前台和后台。 前台用于显示 showImg(https://segmentfault.com/img/remo...
数据库 create database productstore character set utf8 collate utf8_bin; USE productstore; -- 用户表 CREATE TABLE `user` ( `id` INT(11) AUTO_INCREMENT, `userName` VARCHAR(20) , `password` VARCHAR(20)...
摘要:前言由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 前言 由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 由于更新比较频繁,因此隔一段时间才会更新目录导航哦~想要获取最新原创的技术文章欢迎关注我的公众号:Java3y Java3y文章目录导航 Java基础 泛型就这么简单 注解就这么简单 Druid数据库连接池...
摘要:而面向搜索引擎,就是我们要及时的使用百度谷歌遇到问题无法解决,先别急着放弃,可以去网络寻找答案,你的坑大部分别人都已经走过了,大部分都可以找到合适的解决方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●众多的语言,到底哪一门才是适合我的?●我们为什么要学习Java语言呢...
摘要:今天给大家介绍下周期性线程池的使用和重点源码剖析。用来处理延时任务或定时任务定时线程池类的类结构图接收类型的任务,是线程池调度任务的最小单位。周期性线程池任务的提交方式周期性有三种提交的方式。 之前学习ThreadPool的使用以及源码剖析,并且从面试的角度去介绍知识点的解答。今天给大家介绍下周期性线程池的使用和重点源码剖析。 ScheduledThreadPoolExecutor S...
阅读 2188·2021-11-19 09:40
阅读 1921·2021-11-08 13:24
阅读 2455·2021-10-18 13:24
阅读 2861·2021-10-11 10:57
阅读 3580·2021-09-22 15:42
阅读 1115·2019-08-29 17:11
阅读 2529·2019-08-29 16:11
阅读 2422·2019-08-29 11:11