Java实践项目 - 购物车模块
Smiling & Weeping
----世界上美好的东西不太多,立秋傍晚从河对岸吹来的风,
加入购物车
1.数据创建--创建t_cart
CREATE TABLE t_cart(
cid INT AUTO_INCREMENT COMMENT '购物车数据id',
uid INT NOT NULL COMMENT '用户id',
pid INT NOT NULL COMMENT '商品id',
price BIGINT COMMENT '加入时商品价格',
num INT COMMENT '商品数量',
created_user VARCHAR(20) COMMENT '创建人',
created_time DATETIME COMMENT '创建时间',
modified_user VARCHAR(20) COMMENT '修改人',
modified_time DATETIME COMMENT '修改时间',
PRIMARY KEY (cid)
)ENGING=InnoDB DEFAULT CHARSET=utf8;
<!-- INSERT INTO 和 VALUES 必须一一对应 -->
<!-- INSERT INTO 和 VALUES 必须一一对应 -->
<!-- INSERT INTO 和 VALUES 必须一一对应 -->
1.2.创建实体类
1.3.持久层
1.3.1规划执行的SQL语句
1.3.1.1想购物车表中插入数据
insert into t_cart (cid除外) values(值列表)
1.3.1.2当前的商品已经在购物车中存在,则直接更新number的数量即可
update t_cart set num=? where cid=?
1.3.1.3在插入或者更新具体执行哪个语句,取决于数据库中是否有当前这个购物车的数据,得去查询才能确定
select * from t_cart where cid=? and uid=?
1.3.2设计接口和抽象方法
创建一个CartMapper接口持久层的文件
1.3.3SQl映射
1.3.3.1创建一个CartMapper.xml映射文件,添加三个以上抽象方法的SQL语句映射
1.4.业务层
1.4.1规划异常
1.4.1.1插入数据时可能产生异常:InsertException
1.4.1.2更新数据时可能产生异常:UpdateException
1.4.2接口和抽象方法
创建一个ICartService接口文件
1.4.3实现接口
创建一个CartServiceImpl的实现类
再创建一个对应的测试类
1.5.控制层
1.5.1没有需要处理的异常
1.5.2设计请求处理的设计
/carts/add_to_cart
GET
参数:pid,amount,session
JsonResult<void>
1.5.3请求处理方法的编写
1.5.4在product.html页面给【添加购物车】按钮点击事件,并发送ajax请求
2展示购物车列表
2.1持久层
2.1.1规划SQL语句
##多表查询,如果字段不重复,则不要声明字段属于哪张表
SELECT t_cart.price , t_cart.num , cid , uid , pid ,t_product. image , t_product.title , t_product.price AS realprice
FROM t_cart LEFT JOIN t_product ON t_cart.pid = t_product.id
//把这个购物车表作为主表去连接商品表,连接的条件是pid和id的字段相等才可以做这样的一个连接
WHERE uid=#{uid}
ORDER BY t_cart.createdTime DESC
2.2设计接口和抽象方法
VO:对象Value Object: 值对象。当进行select查询时,查询结果属于多张表的内容,此时发现结果集不能直接使用某个POJO实体类来接受,POJO实体类不能包含多表查询出来的结果。
解决方式是:重新构建一个新的对象把这个对象用户存储所查询出来的结果集对应的映射,把这样的对象称为 值对象。
2.3映射SQL
2.4业务层
2.4.1编写业务层的接口方法
2.4.2在实现类中实现此方法
2.5控制层
2.5.1设计请求
/carts/
GET
JsonResult<List<CartVO>>
2.5.2实现请求处理的方法
3增加购物车商品数量
3.1持久层
3.1.1规划执行的SQL语句
3.1.1.1执行更新t_cart记录的num值,无需重复开发记录的num值
update t_cart set num=?,modified_user=?,modified_time=? where cid
3.1.1.2根据cid的值来查询当前的购物车这条数据是否存在
select * fromt_cart where cid={cid}
对于resultMap映射来说,可以返回一个复杂的对象
对于resultType来说,返回简单的String,int,Integer
3.1.2接口和抽象方法
3.1.3在映射文件中配置SQL语句的映射
3.2业务层
3.2.1规划异常
3.2.1.1在更新时会产生异常
3.2.1.2查询到的数据是否有访问的权限
3.2.1.3查询的数据不存在,抛出:CartNotFoundException,五个构造方法
3.2.2设计接口和抽象方法
3.3控制层
3.3.1处理异常
3.3.2设计请求
请求路径/carts/{cid}/num/add
Integer cid , token
JsonResult<Integer>
3.3.3处理请求
4购物车结算(显示勾选的购物车数据)
4.1持久层
4.1.1规划SQL语句
用户在购物车列表页中通过随机勾选相关的商品,在订单点击结算按钮后,跳转到结算页面中,需要展示用户在上个页面所勾选的购物车对应的数据。列表的展示,而展示的内容还是在于购物车的表。两个页面需要将用户勾选的多个cid传给下一个页面
4.1.2接口和抽象方法
4.1.3SQL映射
进行单元测试
4.2业务层
4.2.1没有需要进行异常的规划
4.2.2设计业务层接口中的抽象方法
4.2.3完成抽象方法的设计
4.3控制层
4.3.1请求的设计
/carts/list
Integer cids , token
POST
JsonResult<List<CartVO>>
4.3.2完成请求处理方法的定义声明
4.4前端页面中计算具体金额(后端已经将购物车中的商品个数种类用list传递给前端了)
只需要遍历list中的商品totalPrice += num*price即可
totalPrice += list[i].price*list[i].num;
$("#total-price").html(allPrice);
4.4.1将cart.html页面中“结算”按钮属性更改成type="submit"
4.4.2orderConfirm.html页面中添加自动加载从上个页面传递过来的cids数据,再去请求ajax中进行填充当前页面的某个区域
Java实践项目 - 购物车模块的更多相关文章
- python-django框架-电商项目-购物车模块开发_20191125
python-django框架-电商项目-购物车模块开发 商品详情页js代码: 在商品详情页,有加入购物车按钮, 点击加减号可以增加减少,手动输入也可以, 点击加入购物车,就要加过去, 先实现加减的操 ...
- Java开源生鲜电商平台-购物车模块的设计与架构(源码可下载)
ava开源生鲜电商平台-购物车模块的设计与架构(源码可下载) 说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题, ...
- 基于 Maven 的多模块 Java ( Spring ) 项目构建
索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml pojo/pom.xml mapper/pom.xml common/pom.x ...
- 《Java 程序设计》课堂实践项目 课后学习总结
<Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...
- 《Java 程序设计》课堂实践项目汇总链接
1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...
- 《Java 程序设计》课堂实践项目-类定义
<Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...
- 《Java 程序设计》课堂实践项目-简易计算器
<Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...
- 《Java 程序设计》课堂实践项目-Arrays和String单元测试
<Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...
- 20155308 2016-2017-2《Java程序设计》课堂实践项目
20155308 2016-2017-2<Java程序设计>课堂实践项目 在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅 ...
- # 20155308 2016-2017-2《Java程序设计》课堂实践项目 5月17日
20155308 2016-2017-2<Java程序设计>课堂实践项目 5/17 本次因为git出现了问题,所以没有按时提交我的代码 问题一 在IDEA中对P145 MathTool.j ...
随机推荐
- drf——jwt
jwt原理 使用jwt认证和使用session认证的区别 三段式 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibm ...
- 时间不等人,但 Moment.js 可以等你解决时间问题!
前言 一直以来,处理时间和日期的JavaScript库,选用的都是Moment.js.它的API清晰简单,使用方便灵巧,功能还特别齐全. 我是Moment.js的重度使用者.凡是遇到时间和日期的操作, ...
- MySQL之视图,索引,存储过程,触发器--实操
一.视图 什么是视图? 视图是一个虚拟表,其内容由查询定义. 同真实的表一样,视图包含系列带有名称的列和行数据. 行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成. 简单的来说视图是由 ...
- WPF中控件转命令
WPF不是所有控件都有Command属性,如果窗体需要在ViewModel 使用System.Windows.Interactivity事件 在nuget浏览搜索 下载System.Windows.I ...
- x.ai还是OpenAI?埃隆·马斯克的AI帝国【1】
大家可能知道,在上个月底埃隆·马斯克与1000多名来自各个行业的专家一起联名签署了"Future of Life Institute"发起的一个请愿书,呼吁全社会暂停至少6个月的高 ...
- CKS 考试题整理 (09)-日志审计 log audit
Task 在cluster中启用审计日志.为此,请启用日志后端,并确保: 日志存储在 /var/log/kubernetes/audit-logs.txt 日志文件能保留 10 天 最多保留 2 个旧 ...
- CSS3+Jquery实现带动画效果的下拉选择框
CSS3+JQuery实现带动画效果的下拉选择框. 元素结构为: 1 <div class="box"> 2 <p>this is the first li ...
- ElasticSearch的使用和介绍
1.概述 功能 Elasticsearch 是一个分布式的 RESTful 搜索和分析引擎,可用来集中存储您的数据,以便您对形形色色.规模不一的数据进行搜索.索引和分析. 例如: 在电商网站搜索商品 ...
- ERP开发流程
一.使用Xshell连线执行r.r adzi140 或 助记码r.t 都可以打开数据表设计器 表格建完后,DBA前三个需要点一下,如果表格显示需要表格重建,点最后一个,表格新建完成后,记得点击执行异动 ...
- LeetCode 周赛 352(2023/07/02)一场关于子数组的专题周赛
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问. 往期回顾:LeetCode 单周赛第 350 场 · 滑动窗口与离 ...