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);
}

生成订单:三个表(Products,Orders,OrderItem)的更多相关文章

  1. Activiti工作流学习笔记(三)——自动生成28张数据库表的底层原理分析

    原创/朱季谦 我接触工作流引擎Activiti已有两年之久,但一直都只限于熟悉其各类API的使用,对底层的实现,则存在较大的盲区. Activiti这个开源框架在设计上,其实存在不少值得学习和思考的地 ...

  2. {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析

    MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...

  3. Hibernate第三天——表间关系与级联操作

    第三天,我们来使用Hibernate进行表之间一对多 多对多关系的操作: 这里我们先利用两个例子进行表关系的回顾: 一对多(重点): 例如分类和商品的关系,一个分类多个商品,一个商品属于一个分类 CR ...

  4. Oracle 函数 “自动生成订单号”

    create or replace function get_request_code return varchar2 AS --函数的作用:自动生成订单号 v_mca_no mcode_apply_ ...

  5. SQL Server三种表连接原理

    在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...

  6. MySQL订单分库分表多维度查询

    转自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL订单分库分表多维度查询  MySQL分库分表,一般只能按照一个维度进行查询. 以订单 ...

  7. 如何一步一步用DDD设计一个电商网站(十二)—— 提交并生成订单

    阅读目录 前言 解决数据一致性的方案 回到DDD 设计 实现 结语 一.前言 之前的十一篇把用户购买商品并提交订单整个流程上的中间环节都过了一遍.现在来到了这最后一个环节,提交订单.单从业务上看,这个 ...

  8. C# 处理Word自动生成报告 三、设计模板

    C# 处理Word自动生成报告 一.概述 C# 处理Word自动生成报告 二.数据源例子 C# 处理Word自动生成报告 三.设计模板 C# 处理Word自动生成报告 四.程序处理 既然是模板就少不了 ...

  9. django 多对多自定义第三张表时的注意事项

    杂交(自定义第三张表+ManyToManyField) # modles.py class Boy(models.Model): name = models.CharField(max_length= ...

随机推荐

  1. JAVA开发环境搭建 - JDK安装及环境变量配置

    1.前提条件 系统:本教程以WIN7系统为例 JDK:本教程以jdk-7u79-windows-x64为例 2.安装步骤 双击运行JDK安装程序

  2. Html5 基础----列表详述

    html5列表 标签 列表分为:  有序列表/无序列表/自定义列表,用的最多的为无序列表和自定义列表 1.有序列表(order list) eg:把

  3. java线程学习(一)

    1.简介 java基础知识部分线程创建的三种方式.线程执行的样例. 代码地址:http://git.oschina.net/blue_phantom/javaj 包位置:package com.blu ...

  4. Java面试02|Java集合

    关于Java中并发集合有: (1)CouncurrentHashMap (2)CopyOnWriteArrayList (3)LinkedBlockingQueue (4)ArrayBlockingQ ...

  5. cocos2dx 中文路径编译错误记录

    '/Q' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1> 'y' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1>C:\Program Files ...

  6. react学习总结

    http://www.runoob.com/react/react-tutorial.html一般先看一些中文的简单的介绍和一些基本概念http://reactjs.cn/react/docs/get ...

  7. 1601: [Usaco2008 Oct]灌水

    1601: [Usaco2008 Oct]灌水 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 1342  Solved: 881 [Submit][S ...

  8. c/c++重定向输入输出

    #define Local #include <iostream> #include <cstdio> //#include <stdio.h> using nam ...

  9. PHP语言开发微信公众平台(订阅号)之开启开发者模式

    (1)打开上一篇我们从花生壳官网获得的外网网址就会看到localhost根目录下的文件(这里不再赘述php环境的搭建).注:因为外网网址在能联网时,访问外网网址的任何人都能看到根目录下的所有文件,不仅 ...

  10. Asp.Net MVC4中的全局过滤器,

    可以对整个项目进行全局监控. 新建一个MVC4项目,可以在global.asax文件中看到如下代码:  FilterConfig.RegisterGlobalFilters(GlobalFilters ...