开发者学堂课程【Java Web项目实战2:图书商城:订单模块之添加订单之DAO层实现】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/35/detail/782
订单模块之添加订单之DAO层实现
内容简介:
一、生成订单的整体思路
二、如何用代码实现订单生成
一、生成订单的整体思路
生成订单时必然是先对购物车进行一个一键购买后生成一个订单,即真正发起一个订单是在购物车上。
1.点击一键购买后程序流程来到OrderServlet#add()
①创建 Order 对象
*其中订单是通过购物车形成的
*从 session 中获取 cart
*然后使用 cart 来生成 order
*清空购物车
②将对象用来调用 service 的 add(Order order)方法
③保存生成的订单,转发到 /jsos/order/desc.jsp
2.生成订单后创建条目标OrderServlet#add(Order)
操作应该是一个事务
①保存订单
②保存该订单中的所有条目
3.提供方法OrderDao
① addOrder(Order order)
② addOrderItemList(List<OrderItem>orderItemList)(用批处理)
4.显示当前订单/jsps/order/desc.jsp
5.生成订单整体流程图如下:
二、实现生成订单
1.从 DAO 开始,完成第一个功能
添加订单,处理 util 的 Date 转换成 sql 的 Timestamp
public void addOrder(Order order){
try{
String sql = “insert into order values(?,?,?,?,?,?)”;
Timestamp timestamp=new Timestamp(order,getOrdertime(),getTime()):
Object()parama=(order.getOid(),timestamp,order.getTotal(),
Order.getState(),order.getOwner().getVid(),
Order.getAddress());
qr.update(sql,params);
} catch (SQLException e);{
Throw new RuntimeException (e);
}
插入订单条目
public void addOrderItemList(List<OrderItem>orderItemList) {
QueryRunner类的batch(String sql ,Object[ ] [ ] params),其中params 是多个一位数组,每个一位数组都与 sql 在一起执行一次,多个一维数组就执行多次。
try{
String sql = “insert into order values(?,?,?,?,?,?)”;
把 orderItemList 转换成两维数组,把一个 OrderItem 对象转换成一个一维数组。
Object[][]params=new Object[orderItemList,size()][ ];
循环遍历 orderItemList,使用每个 orderItem 对象 为 params 中每个一位数组赋值
for (int I =0;i < orderItemList.size();i++){
orderItem item = orderItemList.get(i);
params[i]=new Object [ ]{item.getIid(),item.getCount(),
item.getSubtotal(),item.getOrder().getOid(),
item.getBook().getBid());
}
执行批处理
qr.batch(sql,params);
} catch(SQLException e){
Throw new RuntimeException(e);
}
2.来到 service 中,完成第二个功能
添加订单,需要处理事务
public void add(Order order){
}
3.来到 web.serviet,添加方法
添加订单,把 session 中的车用来生成 Order 对象
public String add(HttpservietRequest requst,HttpServietResponse response)
throwa ServletException,IOException{
return null;
}