PetStore项目总结
数据库(MySQL):
account(用户表;没有外键), profile(用户侧面信息表;有两个外键:catid,username),
category(宠物总分类表--鱼;没有外键), product(宠物小分类表--金鱼;有一个外键:catid),
item(具体宠物分类--凤尾龙睛;有一个外键:productid), orders(订单表;没有外键),
cart(购物车表;有两个外键:itemid,orderid; 主键:itemid 和 orderid作为联合主键)
account (用户表) 和 profile (用户的辅助信息;侧面信息) 是一对一关系。
//profile里有一个外键(username) 与 account里的主键(username)相对应。account没有外键。
category (宠物总分类表) 和 profile (用户侧面信息表) 是 多对多关系。//一类宠物可以有多个买家,买家也可以买多类宠物。
//profile里有一个外键(catid) 与 category 里的主键(catid)相对应。category 没有外键。
category (宠物总分类表) 和 product(宠物小分类) 是 一对多关系。//一类宠物有多个品种。
//product里有一个外键(catid) 与 category 里的主键(catid)相对应。category 没有外键。
product(宠物小分类) 和 item(具体宠物分类) 是一对多关系。//一类品种下的一只只狗。
//item里有一个外键(productid) 与 product里的主键(productid)相对应。
cart(购物车) 和 item(具体宠物分类) 是 一对多关系。
//cart里有一个外键(itemid) 与 item里的主键(itemid)相对应。
cart(购物车) 和 orders(订单表) 是 一对一关系。
//cart里有一个外键(orderid) 与 item里的主键(orderid)相对应。
用到的技术:
Spring + SpringMVC + MyBatis + Freemarker + MySQL
实现的功能:
登录、注册(Spring校验)、查询宠物(总分类、小分类、具体分类)、购物车
业务逻辑:
orders表里有一个orderdate字段,该字段为空表示没有结账。
cart表里itemid 和 orderid作为联合主键:也就是说同一张表里不能有相同的宠物具体分类,如果想订多个,用quantity字段控制(多次买合并,quantity+1)。
最开始是index页(从control层跳转过来的)
直接点进入商店 左上角显示游客(session为空)
右上角登录 登录失败显示红字 登录成功跳转到商店页面 并显示名字
注册:在下拉框(异步的)显示所有宠物大分类.(Spring 校验)。
进入商店后,显示宠物大分类(category),点击进入后显示该大分类下的宠物小分类(product);
再点击进入宠物小分类里是具体宠物分类(item):该页面有宠物的简单信息,可以点击加入购物车直接加入购物车(并进入购物车页面),也可以点击宠物序号进入宠物详细介绍页面。
宠物详细介绍页面:该页面也是显示item表里的数据,只不过信息更详细,还有宠物的图片(数据库里存的是图像名<#assign ppath=request.contextPath><img src="${ppath}/static/images/${item.product.pic}"> 这样就取出来了),该页面也可以把商品加入购物车(并进入购物车页面)。
购物车页面:

该页面显示已加入购物车内的商品,并且可以改变宠物数量的值或删除该宠物,然后点击Update Cart按钮,合计和总计会计算出相应的值。
这时虽然Orders表里已经产生一笔数据,但是它的orderdate字段为空,表示没有结账。
直到点击下面的按钮表示提交订单,orderdate字段才会添加当前时间,表示已结账并记录当前时间。
然后页面返回到刚进入商店时的宠物大分类页面。
最后附上该项目的源码:
https://github.com/chenzhida666/PetStore
PetStore项目总结的更多相关文章
- WebX配置文件、启动与响应流程
** 最近几天一直在看Spring的Ioc和AOP的源码介绍,还有Webx的使用.看Spring的源代码让人眼花缭乱,webx的配置文件也会让人感觉错综复杂无从下手.今天把之前看到的想到的webx相关 ...
- webx--petstore
配置对应环境,运行petstore 通过官网给的命令行方法,来运行petstore petstore是java ee的经典学习案例,下载链接 如何运行呢? 参见官网给的指导:webx官网 git cl ...
- 不是广告--如何学Java,我说点不太一样的学习方式
首先声明,这篇文章不是卖课程.介绍培训班的广告. 最近有不少读者通过微信问我:小白应该怎么学好 Java? 提问的人里有在校大学生.有刚参加工作的.有想转行做程序员的,还有一部分是最近找工作不顺的. ...
- 学Java,找对圈子,跟对人
我大学学的是机械专业,到大四才决定要学Java,以后当一名程序员. 到现在,十几年过去了,我现在已经是一家上市公司的技术总监了,管理的技术团队有100多人.很庆幸当初了选择了学Java. 还记得当初学 ...
- ABP教程-给项目添加SwaggerUI,生成动态webapi
上一篇,我们是正式将ABP生成的代码项目,跑起来了,然后演示了下多租户的不同.那么这篇我们就来实现下SwaggerUI. Q:SwaggerUI是干什么的呢? A:他是一个能将我们的webapi,通过 ...
- Webx框架自带的petstore
Webx框架:http://openwebx.org/ petstore:webx3/webx-sample/petstore/tags/3.0/petstore 编译之后:mvn jetty:run ...
- 从头开始基于Maven搭建SpringMVC+Mybatis项目(4)
接上文内容,上一节中的示例中完成了支持分页的商品列表查询功能,不过我们的目标是打造一个商品管理后台,本节中还需要补充添加.修改.删除商品的功能,这些功能依靠Mybatis操作数据库,并通过Spring ...
- 从头开始基于Maven搭建SpringMVC+Mybatis项目(3)
接上文内容,本节介绍基于Mybatis的查询和分页功能,并展示一个自定义的分页标签,可重复使用以简化JSP页面的开发. 从头阅读传送门 在上一节中,我们已经使用Maven搭建好了项目的基础结构,包括一 ...
- 从头开始基于Maven搭建SpringMVC+Mybatis项目(1)
技术发展日新月异,许多曾经拥有霸主地位的流行技术短短几年间已被新兴技术所取代. 在Java的世界中,框架之争可能比语言本身的改变更让人关注.近几年,SpringMVC凭借简单轻便.开发效率高.与spr ...
随机推荐
- 一个简单的servlet
1.创建一个自己的servlet文件,继承HttpServlet MyServlet.java package com.jmu.ccjoin.controller; import java.io.IO ...
- 北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?
作者:知乎用户链接:https://www.zhihu.com/question/21092045/answer/17164418来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- dedecms获取顶级栏目名称、二级栏目名称实现方法
织梦DEDECMS文章.栏目页获取当前页面顶级栏目名称的方法 在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} ...
- javascript 无刷新上传图片之原理
刚开始我认为可以像ajax 那样获取到数据然后通过ajax 发送请求,后来发现浏览器为了客户端的安全默认并没有给javascript 这个权限.这个方法当然是行不同了.我看了好像开源的上传图片原理,当 ...
- hdu 4022 Bombing(map,multiset)
题意:n个基地放在2维平面,然后m个炸弹人,每个炸弹人可以炸一行或者一列,输出每个炸弹人炸掉的基地个数. 思路:用map<int,multiset<int> >对应起来一行或者 ...
- Spring3 Schedule Task之注解实现 (两次起动Schedule Task 的解决方案)
Spring3 Schedule Task之注解实现 (两次起步Schedule Task 的解决方案)Spring3 Schedule Task之注解实现 (两次启动Schedule Task 的解 ...
- 微信小程序在线支付功能使用总结
最近需要在微信小程序中用到在线支付功能,于是看了一下官方的文档,发现要在小程序里实现微信支付还是很方便的,如果你以前开发过服务号下的微信支付,那么你会发现其实小程序里的微信支付和服务号里的开发过程如出 ...
- 浅谈getAttribute兼容性
最近终于证实tag.setAttribute("style", "color:#000;");在IE7中不起作用.于是百度了一些解决办法. IE的setAttr ...
- 如何在XCode中更改iPhone或iPad模拟器类型
如何在XCode中更改iPhone或iPad模拟器类型 参考方法一(永久,一旦设置后,每次运行指定的模拟器):(1)选择顶层菜单Project 中的 Set Active Executable(2)根 ...
- Educational Codeforces Round 21E selling souvenirs (dp)
传送门 题意 给出n个体积为wi,价值为ci的物品,现在有一个m大的背包 问如何装使得最后背包内的物品价值最大,输出价值 分析 一般的思路是01背包,但n*v不可做 题解的思路 We can iter ...