商品订单从购物车页面提交
1.分析
2.OrderItem.java
private String itemid ; //订单项的idprivate int count ; //该订单项有多少件商品
private double subtotal ; //该订单项的总计金额
private Product product ; //该订单项中封装的商品
private Order orders ; //该订单项属于哪个订单(即哪个用户)
3.Order.java
private String oid ; //order订单项的id属性
private Date datetime ; //订单产生的日期
private double total ; //订单项的总计金额
private int state ; //定义标志位 1代表已经付款 0代表未付款
private String address ; //收货人的地址
private String name ; //收货人姓名
private String telephone ; //收货人电话号码
private User user ; //订单用户的信息
List<OrderItem> orderItems = new ArrayList<OrderItem>(); //该订单中有多少个订单项
4.servlet页面代码
//提交订单
public void submitOrder(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
//首先判断用户是否登录,如果没有登录则跳转到登录页面进行登录
User user = (User) session.getAttribute("user");
if(user==null) {
//跳转到登录页面进行登录
response.sendRedirect(request.getContextPath()+"/login.jsp");
return ;
}
/**
* 提交订单主要是讲全部的订单信息封装成order对象
*
*/
Order orders = new Order();
// 1 private String oid ; //order订单项的id属性
orders.setOid(CommonsUtils.getUUID());
// 2 private Date datetime ; //订单产生的日期
orders.setDatetime(new Date());
// 3 private double total ; //订单项的总计金额
//获得购物车中的total
Cart cart = (Cart) session.getAttribute("cart");
double total = cart.getTotal();
orders.setTotal(total);
//System.out.println(total);
// 4 private int state ; //定义标志位 1代表已经付款 0代表未付款
orders.setState(0);
// 5 private String address ; //收货人的地址
orders.setAddress(null);
// 6 private String name ; //收货人姓名
orders.setName(null);
// 7 private String telephone ; //收货人电话号码
orders.setTelephone(null);
// 8 private User user ; //订单用户的信息
orders.setUser(user);
//9 List<OrderItem> orderItems = new ArrayList<>(); //该订单中有多少个订单项
//从购物车中找出购物项
Map<String, CartItem> cartItem = cart.getCartItem();
for (Map.Entry<String, CartItem> entrys : cartItem.entrySet()) {
//获得购物车中的内容
CartItem value = entrys.getValue();
//根据购物车封装订单项
OrderItem orderItem = new OrderItem();
// private String itemid ; //订单项的id
orderItem.setItemid(CommonsUtils.getUUID());
// private int count ; //该订单项有多少件商品
orderItem.setCount(value.getBuyNum());
// private double subtotal ; //该订单项的总计金额
orderItem.setSubtotal(value.getSubTotal());
// private Product product ; //该订单项中封装的商品
orderItem.setProduct(value.getProduct());
// private Order orders ; //该订单项属于哪个订单(即哪个用户)
orderItem.setOrders(orders);
orders.getOrderItems().add(orderItem);
}
ProductService service = new ProductService();
service.submitOrder(orders);
session.setAttribute("orders", orders);
response.sendRedirect(request.getContextPath()+"/order_info.jsp");
}
5.service页面代码
//提交商品订单 将商品信息保存到数据库中
public void submitOrder(Order orders) {
ProductDao dao = new ProductDao();
try {
//开启事物
DataSourceUtils.startTransaction();
//向order表中存储数据
dao.addOrder(orders);
//向orderItem表中存储数据
dao.addOrderItem(orders);
} catch (SQLException e) {
try {
DataSourceUtils.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally {
try {
DataSourceUtils.commitAndRelease();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
6.dao页面代码实现
//向order表中存储数据
public void addOrder(Order orders) throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "insert into orders values (?,?,?,?,?,?,?,?)";
Connection conn = DataSourceUtils.getConnection();
qr.update(conn, sql, orders.getOid(),orders.getDatetime(),orders.getTotal(),orders.getState(),
orders.getAddress(),orders.getName(),orders.getTelephone(),orders.getUser().getUid());
}
//向orderItem表中存储数据
public void addOrderItem(Order orders) throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "insert into orderitem values (?,?,?,?,?)";
Connection conn = DataSourceUtils.getConnection();
List<OrderItem> orderItems = orders.getOrderItems();
for (OrderItem orderItem : orderItems) {
qr.update(conn, sql,orderItem.getItemid(),orderItem.getCount(),orderItem.getSubtotal(),
orderItem.getProduct().getPid(),orderItem.getOrders().getOid() );
}
}
7.jsp页面 略...