订单生成案例详解

分析:

首先用户必须登陆

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

我们需要一个订单表。

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

通过上面分析,我们会发现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