1.有三個表(Product上,Orders,OrderItem)
分別創建對應的三個實體類
OrderItem中有外鍵Order_id 參考Orders中的id ;Product_id參考Product中的id;Orders中有外鍵User_id參考User中的id
sql 代碼:
CREATE DATABASE day2017_04_05; USE day2017_04_05; CREATE TABLE `user` ( `id` INT(11) AUTO_INCREMENT, `username` VARCHAR(20) , `PASSWORD` VARCHAR(20) , `gender` VARCHAR(10) , `email` VARCHAR(50) , `telephone` VARCHAR(20) , `introduce` VARCHAR(100), `activeCode` VARCHAR(50) , `state` INT(11) , `role` VARCHAR(10) DEFAULT '普通用戶', `registTime` TIMESTAMP , PRIMARY KEY (`id`) ) 商品表 CREATE TABLE `products` ( `id` VARCHAR(100) , `name` VARCHAR(40) , `price` DOUBLE , `category` VARCHAR(40) , `pnum` INT(11) , `imgurl` VARCHAR(100) , `description` VARCHAR(255) , PRIMARY KEY (`id`) ) 訂單表 CREATE TABLE `orders` ( `id` VARCHAR(100) , `money` DOUBLE , `receiverAddress` VARCHAR(255) , `receiverName` VARCHAR(20) , `receiverPhone` VARCHAR(20) , `paystate` INT(11) , `ordertime` TIMESTAMP , `user_id` INT(11) , PRIMARY KEY (`id`), FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ) 訂單項表 CREATE TABLE `orderitem` ( `order_id` VARCHAR(100) , `product_id` VARCHAR(100), `buynum` INT(11) , PRIMARY KEY (`order_id`,`product_id`), FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`), FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) )
實體類
public class Order { private String id; // 訂單編號 private double money; // 訂單總價 private String receiverAddress; // 送貨地址 private String receiverName; // 收貨人姓名 private String receiverPhone; // 收貨人電話 private int paystate; // 訂單狀態 private Date ordertime; // 下單時間 private int userid; private List<OrderItem> orderItems; }
public class OrderItem { private Order order;//訂單 private Product product; //商品 private int buynum; //購物數量 }
public class Product { private String id; // 商品編號 private String name; // 名稱 private double price; // 價格 private String category; // 分類 private int pnum; // 數量 private String imgurl; // 圖片路徑 private String description; // 描述 }
servlet 操作
package com.learning.web.servlet; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import com.learning.domain.Order; import com.learning.domain.OrderItem; import com.learning.domain.Product; import com.learning.domain.User; import com.learning.service.OrderService; @WebServlet("/createOrder") public class CreateOrderServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Order order=new Order(); User user = (User) request.getSession().getAttribute("user"); try { BeanUtils.populate(order, request.getParameterMap()); order.setId(UUID.randomUUID().toString()); order.setUserid(user.getId()); } catch (Exception e) { e.printStackTrace(); } List<OrderItem> orderItems=new ArrayList<OrderItem>(); //從session中獲取cart,添加到訂單項中 Map<Product, String> cart = (Map<Product, String>) request.getSession().getAttribute("cart"); for (Map.Entry<Product, String> map : cart.entrySet()) { OrderItem orderItem=new OrderItem(); orderItem.setBuynum(Integer.parseInt(map.getValue())); orderItem.setProduct(map.getKey()); orderItem.setOrder(order); orderItems.add(orderItem); } order.setOrderItems(orderItems); OrderService orderService=new OrderService(); orderService.createOrder(order); //生成訂單,刪除cart中的所有product cart.clear(); request.getRequestDispatcher("/pay.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
public void createOrder(Order order) { try { ManageTheadLocal.startTransaction(); orderDao.createOrder(order); orderItemDao.createOrderItem(order); productDao.updateProductNumber(order); ManageTheadLocal.commit(); } catch (SQLException e) { ManageTheadLocal.rollback(); e.printStackTrace(); } }
public void createOrder(Order order) throws SQLException { QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource()); queryRunner.update(ManageTheadLocal.getConnection()," insert into orders values(?,?,?,?,?,?,?,?)",order.getId(),order.getMoney(),order.getReceiverAddress(),order.getReceiverName(),order.getReceiverPhone(),order.getPaystate(),order.getOrdertime(),order.getUserid()); } public void createOrderItem(Order order) throws SQLException { List<OrderItem> orderItems = order.getOrderItems(); QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource()); Object[][] params =new Object[orderItems.size()][]; for (int i = 0; i < params.length; i++) { params[i]=new Object[]{order.getId(),orderItems.get(i).getProduct().getId(),orderItems.get(i).getBuynum()}; } queryRunner.batch(ManageTheadLocal.getConnection()," insert into orderitem values (?,?,?) ",params ); } public void updateProductNumber(Order order) throws SQLException { List<OrderItem> orderItems = order.getOrderItems(); QueryRunner queryRunner=new QueryRunner(C3P0Util.getDataSource()); Object[][] params=new Object[orderItems.size()][]; for (int i = 0; i < params.length; i++) { params[i]=new Object[]{orderItems.get(i).getBuynum()}; } queryRunner.batch(ManageTheadLocal.getConnection()," update products set pnum=pnum-?", params); }
