首页 > 编程语言 >Java实践项目 - 购物车模块

Java实践项目 - 购物车模块

时间:2023-08-02 17:46:12浏览次数:33  
标签:COMMENT Java 1.3 cid cart 购物车 num 模块

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中进行填充当前页面的某个区域

标签:COMMENT,Java,1.3,cid,cart,购物车,num,模块
From: https://www.cnblogs.com/smiling-weeping-zhr/p/17601340.html

相关文章

  • JAVA-Springboot实践项目-用户注册
    Smiling&Weeping----我本没喜欢的人,见你的次数多了,也就有了。1.创建数据表1.1.选中数据表:usestore1.2.创建t_user表:2创建用户实......
  • java报错:unable to find valid certification path to requested target
    问题发现unabletofindvalidcertificationpathtorequestedtarget当我使用java代码访问某个URL的时候,报了这个错误,经过查询发现需要安装证书到java环境,所以记录一下。下载证书我使用的是chrome浏览器,点击地址栏左边小锁,选择第一个选项。然后选择证书有效。在弹出的......
  • Java实践项目 - 用户登录
    Smiling&Weeping----以花祈愿,祝你平安 当用户输入用户名和密码将数据提交给数据库进行查询,如果存在对应的用户名和密码,则表示登陆成功,登录成功之后跳转到系统的主页就是index.html页面,跳转在前端使用jQuery来完成1.登录-持久层1.......
  • Java编程-依据类图与流程图实现对应接口
    类图依据与流程图依据封装常见的HTTP状态码RegisterController接口register(Stringname,Stringpwd)login(Stringname,Stringpwd)NovelController接口addNovel()asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfNovelContentController接口asdfasdfasdfasdfasdf......
  • 高通SDM450核心板4G安卓智能模块_高通开发板方案定制
    高通SDM450安卓核心板是工业级高性能,可运行android9.0操作系统的4G智能模块。高通SDM4504G核心板采用台积电14nmFinFET制程工艺,8*Cortex-A53架构,搭载Android9.0操作系统,主频最高达1.8GHz。高通SDM450安卓核心板基本概述:高通SDM450安卓核心板是一款基于高通平台、工业级......
  • 学习Java的第12天
    packageoperator;publicclassDemo04{publicstaticvoidmain(String[]args){//++--自增,自减一元运算符inta=3;intb=a++;//执行完这行代码后,先给b赋值,再自增//a=a+1System.out.println(a);//a=......
  • 2023年Java学习路线,史上最全Java学习路线-文中有送书福利
    小伙伴们大家好,这里是动力节点,我们从2009年开始一直在从事Java培训到今年已经整14年了,虽然现在不缺培训机构,更不缺Java培训,但是像我们这么多年专注这一件事的应该也不多。我们只希望在“专业”两个字上面不断精进,给每一位想学Java的同学带来更好的资源和学习规划。我们深知,有很多同......
  • idea查看java代码汇编指令
    将下列jar包放入到jre的bin目录下面   hsdis-amd64.dll指定java的jvm参数-server-Xcomp-XX:+UnlockDiagnosticVMOptions-XX:+PrintAssembly-XX:CompileCommand=compileonly,*VolitaleDemo.main运行......
  • pandas模块------------------------筛选条件loc(多条件选择)
    loc在选择时应用条件。单条件:选择大于90成绩的学生信息:importpandasaspdsource=pd.read_excel('C:/Users/Administrator/Desktop/source.xlsx')print(source)da=source.loc[(source['成绩']>90)]print(da)G:\Python3.8解释器\python.exeC:/Users/Administrator/P......
  • java位运算及移位运算你还记得吗
    本文中所提到的运算都是基于整数来说的,因为只有整数(包括正数和负数)在操作系统中是以二进制的补码形式运算的,关于原码、反码、补码、位运算、移位运算的背景这里不再介绍,网上资料很多,感兴趣的可自行搜索。java中能表示整数数据类型的有byte、short、char、int、long,在计算机中占用......