首页 > 代码库 > 订单生成案例详解
订单生成案例详解
分析:
首先用户必须登陆
将商品添加到购物车,在生成订单。
我们需要一个订单表。
在订单中我们需要包含商品,并且还需要收货人地址,收货人,联系方式信息。
通过上面分析,我们会发现orders表需要与user及products表关联。
用户与订单之间 它们是一对多关系 用户是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)
)
生成订单:
- 要向orders表中insert
- 要向ordersItem表中insert
- 要修改商品表中的商品数量
上述操作,需要使用事务控制。
向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案例文档’
订单生成案例详解