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实践项目 - 购物车模块的更多相关文章

  1. python-django框架-电商项目-购物车模块开发_20191125

    python-django框架-电商项目-购物车模块开发 商品详情页js代码: 在商品详情页,有加入购物车按钮, 点击加减号可以增加减少,手动输入也可以, 点击加入购物车,就要加过去, 先实现加减的操 ...

  2. Java开源生鲜电商平台-购物车模块的设计与架构(源码可下载)

    ava开源生鲜电商平台-购物车模块的设计与架构(源码可下载) 说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题, ...

  3. 基于 Maven 的多模块 Java ( Spring ) 项目构建

    索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml pojo/pom.xml mapper/pom.xml common/pom.x ...

  4. 《Java 程序设计》课堂实践项目 课后学习总结

    <Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...

  5. 《Java 程序设计》课堂实践项目汇总链接

    1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...

  6. 《Java 程序设计》课堂实践项目-类定义

    <Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...

  7. 《Java 程序设计》课堂实践项目-简易计算器

    <Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...

  8. 《Java 程序设计》课堂实践项目-Arrays和String单元测试

    <Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...

  9. 20155308 2016-2017-2《Java程序设计》课堂实践项目

    20155308 2016-2017-2<Java程序设计>课堂实践项目 在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅 ...

  10. # 20155308 2016-2017-2《Java程序设计》课堂实践项目 5月17日

    20155308 2016-2017-2<Java程序设计>课堂实践项目 5/17 本次因为git出现了问题,所以没有按时提交我的代码 问题一 在IDEA中对P145 MathTool.j ...

随机推荐

  1. 各种版本的Linux 镜像下载网址

    今天发现Linux 镜像下载网址感觉很不错,分享给有需要的小伙伴们 访问地址 Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\ubuntu\debia ...

  2. 代码随想录算法训练营Day24 回溯算法|216.组合总和III 17.电话号码的字母组合

    代码随想录算法训练营 216.组合总和III 题目链接:216.组合总和III 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说 ...

  3. WPF 入门笔记 - 03 - 样式基础及控件模板

    原学习路线是按照圣殿骑士的<WPF基础到企业应用系列>的路线走的,但是布局之后直接依赖属性学起来有些僵硬,不太好理解,尝试了文章的前部分内容后放弃,调整为本篇博文内容.笔记路线将按照痕迹g ...

  4. Tab切换以及倒计时组件封装

    1.Tab组件 功能 支持默认选中tab 子元素可以是文本或者图片 自定义tab的数量,并自适应展示 实现方式 用ul > li标签遍历传入的tabs数组参数渲染 判断是否传入背景,未传则显示文 ...

  5. 云上使用 Stable Diffusion ,模型数据如何共享和存储

    随着人工智能技术的爆发,内容生成式人工智能(AIGC)成为了当下热门领域.除了 ChatGPT 之外,文本生成图像技术更令人惊艳. Stable Diffusion,是一款开源的深度学习模型.与 Mi ...

  6. C++面试八股文:用过STL吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第21面: 面试官:用过STL吗? 二师兄:(每天都用好吗..)用过一些. 面试官:你知道STL是什么? 二师兄:STL是指标准模板库(Standar ...

  7. 论文翻译:2021_Real-Time Denoising and Dereverberation wtih Tiny Recurrent U-Net

    论文地址:微型循环U-Net实时降噪和去混响 论文代码: https://github.com/YangangCao/TRUNet https://github.com/amirpashamobini ...

  8. kafka学习笔记03消息队列的两种模式

     ①点对点模式   该种模式就是消费者会自动消费消息,消息收到之后会向消息队列进行确认收到消息,然后将该数据进行删除.  ②发布/订阅模式   可以有多个的topic,topic在英语中有主题的意思, ...

  9. C#中数组=out参数?

    - 结论 先上结论,答案是yes,C#中数组确实具有out参数的特性. - 疑问 最近开发一个上位机的功能,有段代码看得我一直很迷糊,我的认识,函数的执行结果,要么在函数中通过return返回,要么通 ...

  10. Button按钮:得到鼠标焦点后自动放大,失去鼠标焦点后自动缩小_

    作用 程序设计过程中,我们经常需要增加一些动态效果,以此改善用户的使用体验.本文将介绍一种方法,动态显示按钮状态,使其得到鼠标焦点后自动放大,失去鼠标焦点后自动缩小. 效果图 先放一张原图(鼠标还未移 ...