订单生成案例详解

分析:

首先用户必须登陆

将商品添加到购物车,在生成订单。

我们需要一个订单表。

在订单中我们需要包含商品,并且还需要收货人地址,收货人,联系方式信息。

通过上面分析,我们会发现orders表需要与userproducts表关联。

用户与订单之间   它们是一对多关系  用户是1  订单是多。

在多的一方添加外键。

订单与商品之间关系  它们是多对多关系  

多对多关系,我们需要一张新的表来描述其对应关系.

 

-- 订单表

CREATE TABLE orders(

id VARCHAR(50) PRIMARY KEY,

receiverAddress VARCHAR(50),

receiverName VARCHAR(20),

receiverPhone VARCHAR(30),

totalprice DOUBLE,

user_id INT, -- user表做关联

FOREIGN KEY orders(user_id) REFERENCES USER(id)

)

 

SELECT * FROM orders;

 

-- 订单与商品之间多对多关系

CREATE TABLE ordersItem(

oid VARCHAR(50), -- 它是与orders表中的主键关联

pid VARCHAR(50), -- 它是与products表中的主键关联

itemprice DOUBLE,

PRIMARY KEY (oid,pid),--联合主键

FOREIGN KEY ordersItem(oid) REFERENCES orders(id),

FOREIGN KEY ordersItem(pid) REFERENCES products(id)

)

生成订单:

  1. 要向orders表中insert
  2. 要向ordersItem表中insert
  3. 要修改商品表中的商品数量

上述操作,需要使用事务控制。

orders表中的insert数据.

注意:我们向orders表中插入数据时,必须得到当前的用户,其实要的是当前用户的id.

 

orderItem表中的insert

一个订单中可能有多件商品,那么就需要注意了,我们向ordersItem表中插入数据时,可能是批处理。

 

修改products表中商品数量

这个操作可能也是一个批处理操作

 

设计javaBean

 

关于order数据的封装

 

1.order.jsp页面提交的表单请求参数直接就封装到order对象中。

2.登陆成功后我们会将user存储到session中,这时就可以直接从session中获取user,封装到order中。

3.订单项的数据是从购物车中获取的,购物车是存储在session中的,也就是说,直接从session中获取购物车,将购物车中数据封装到  OrdersItem中,这时会得到一个List<OrdersItem>,在将这个集合封装到order中。

 

service中调用dao中方法时,使用QueryRunner不能在使用有参数的,而要使用无参数的,因为我们要进行手动事务控制。

在使用的query,update,batch方法就应该是有Connection参数的方法。

 

 

当点击购物车中生成订单时,会跳转到order.jsp页面

问题:怎样在order.jsp页面上生成数据

cartjsp页面上修改

order.jsp页面修改

当订单的表单提交时,会向CreateOrderServlet发送请求。

注意:我们在order.jsp页面上还需要一个

要不然在servlet中是获取不到总价的。 

 

在CreateOrderServlet中封装数据到Order对象中.

 

封装表单中的请求参数

 

 

封装用户信息

封装订单项数据

service中调用dao中方法完成订单创建操作

注意需要事务控制

具体详细信息见‘ajax案例文档’

 

 

转载于:https://www.cnblogs.com/MessiAndDream/p/6087695.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值