Java Web 网络商城案例演示十四(设计订单表)

保存订单:

为订单表中插入一行数据,描述本次交易,这行数据部分数据是通过程序赋予的,部分数据是来自购物车的,部分数据是来自session中的用户

数据库当中创建表

1、订单表orders

在这里插入图片描述

其中:

**oid:UUIDUtils

orderTime:new Date();

total:从购物车获取

state:1

address:null

name:null

telephone:null

uid:从session中的用户获取到**

保存订单项:

向订单项表中插入数据,描述当前订单的一个详细的购买信息,部分数据是来自购物车,部分数据需要通过程序赋予。

2、订单表orderitem

提交的商品表

在这里插入图片描述

**itemid:UUIDUtils

uid:来自于购物车中的购物项

total:来自购物车中的购物项

pid:来自购物车上购物项下商品对象的pid

oid:来自于当前订单的id**

提交订单时,订单以及订单项必须同时成功(事务)


用户点击提交订单,将购物车中的数据以订单/订单的形式保存来,然后清空购物车

在这里插入图片描述

保存订单:

为订单表中插入一行数据,描述本次及交易,这行数据部分数据是通过程序赋予的,部分数据来自购物车,部分数据来自session中的用户

步骤实现


创建OrderServlet OrderService OrderServiceImpl OrderDaoImpl

Order{User user,List list = new ArrayList}

OrderItem{Product product,Order order}

创建Order{User user,List list = new ArrayList}

public class Order {

private String oid; //订单编号

private Date ordertime; //下单时间

private double total; //总计

private int state; //状态

private String address; //收货人地址

private String name; //收货人姓名

private String telephone; //收货人电话

//程序对象和对象发送关系,而不是对象和对象的属性发送关系

//设计Order目的:让Order携带更多的数据向service,dao传递,user对象是可以携带更多的数据

private User user;

//程序中体现订单对象和订单之间关系,我们再在项目中的部分功能中有类似的需求:查询订单的同时还需要获取订单下所有的订单项

private List list = new ArrayList();

public String getOid() {

return oid;

}

public void setOid(String oid) {

this.oid = oid;

}

public Date getOrdertime() {

return ordertime;

}

public void setOrdertime(Date ordertime) {

this.ordertime = ordertime;

}

public double getTotal() {

return total;

}

public void setTotal(double total) {

this.total = total;

}

public int getState() {

return state;

}

public void setState(int state) {

this.state = state;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getTelephone() {

return telephone;

}

public void setTelephone(String telephone) {

this.telephone = telephone;

}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public List getList() {

return list;

}

public void setList(List list) {

this.list = list;

}

public Order() {

// TODO Auto-generated constructor stub

}

public Order(String oid, Date ordertime, double total, int state, String address, String name, String telephone,

User user, List list) {

super();

this.oid = oid;

this.ordertime = ordertime;

this.total = total;

this.state = state;

this.address = address;

this.name = name;

this.telephone = telephone;

this.user = user;

this.list = list;

}

@Override

public String toString() {

return “Order [oid=” + oid + “, ordertime=” + ordertime + “, total=” + total + “, state=” + state + “, address=”

  • address + “, name=” + name + “, telephone=” + telephone + “, user=” + user + “, list=” + list + “]”;

}

}

创建OrderItem{Product product,Order order}

package cn.itzheng.store.domain;

public class OrderItem {

private String itemid;// id

private int quantity; // 数量

private double total;// 小计

// 1、对象对应对象

// 2、product,order携带更多的数据

private Product product;// 获取其对象上的商品ip即为pid

private Order order;// 获取对象上的oid,当前订单id

public String getItemid() {

return itemid;

}

public void setItemid(String itemid) {

this.itemid = itemid;

}

public int getQuantity() {

return quantity;

}

public void setQuantity(int quantity) {

this.quantity = quantity;

}

public double getTotal() {

return total;

}

public void setTotal(double total) {

this.total = total;

}

public Product getProduct() {

return product;

}

public void setProduct(Product product) {

this.product = product;

}

public Order getOrder() {

return order;

}

public void setOrder(Order order) {

this.order = order;

}

public OrderItem() {

// TODO Auto-generated constructor stub

}

public OrderItem(String itemid, int quantity, double total, Product product, Order order) {

super();

this.itemid = itemid;

this.quantity = quantity;

this.total = total;

this.product = product;

this.order = order;

}

@Override

public String toString() {

return “OrderItem [itemid=” + itemid + “, quantity=” + quantity + “, total=” + total + “, product=” + product

  • “, order=” + order + “]”;

}

}

创建OrderServlet

**创建saveOrder方法

确认用户登录状态

创建订单对象,为订单对象赋值

遍历购物项的同时,创建订单项

调用业务层功能:保存订单

清空购物车

将订单放入request

转发/jsp/order_info.jsp

return “/jsp/order_info.jsp”;**

public class OrderServlet extends BaseServlet {

// saveOrder 将购物车中的信息以订单的形式保存

public String saveOrder(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException, SQLException {

// TODO Auto-generated method stub

// 确认用户登录状态 从session当中获取对应user

User user = (User) request.getSession().getAttribute(“loginUser”);

if (null == user) {

request.setAttribute(“msg”, “请登录之后在下单”);

return “/jsp/info.jsp”;

}

// 从session作用域当中获取购物车

Cart cart = (Cart) request.getSession().getAttribute(“cart”);

// 创建订单对象,为订单对象赋值

Order order = new Order();

order.setOid(UUIDUtils.getCode());// oid获取随机的

order.setOrdertime(new Date());// 获取当前时间

order.setTotal(cart.getTotal());// 获取当前总金额

order.setState(1);

order.setUser(user);// 将当前用户放入到订单当中

// 遍历购物项的同时,创建订单项,为订单项赋值

for (CartItem item : cart.getCartItems()) {// 遍历购物车当中的购物项,cart.getCartItems():获取到购物车当中所有的商品的集合

OrderItem orderItem = new OrderItem();

orderItem.setItemid(UUIDUtils.getCode());// 设置商品编号

orderItem.setQuantity(item.getNum());// 设置订单的商品的数量是Cart当中CartItem商品项的数量

orderItem.setTotal(item.getSubTotal());//将商品的小计设置搭配订单项的金额当中

orderItem.setProduct(item.getProduct());//获取到商品项当中的每一个商品,将商品项放入到订单项当中

//设置当前的订单项属于那个订单:程序的角度体验订单订单项和订单对应关系

orderItem.setOrder(order);//将订单放入到订单项当中,以便获取订单编号

order.getList().add(orderItem);//将每一个订单项放入的到对应的订单当中

}

//调用业务层功能,保存订单

OrderService orderService = new OrderServiceImpl();

//将订单数据,用户数据,订单下所有的订单项都传递到service层

orderService.saveOrder(order);

//清空购物车

cart.clearCart();

//将订单信息放入request

request.setAttribute(“order”, order);

//转发到/jsp/order_info.jsp

return “/jsp/order_info.jsp”;

}

}

OrderService

public interface OrderService {

void saveOrder(Order order) throws SQLException;

}

OrderServiceImpl

public class OrderServiceImpl implements OrderService {

OrderDao orderDao = new OrderDaoImpl();

@Override

public void saveOrder(Order order) throws SQLException {

/*

  • try { //保存订单和订单下所有的订单项(同时成功或者同时失败) //开启数据的事务 JDBCUtils.startTransaction();

  • OrderDao orderDao = new OrderDaoImpl();

  • orderDao.saveOrder(order);

  • for(OrderItem item:order.getList()) {//遍历所有的订单项 orderDao.saveOrderItem(item);

  • }

  • } catch (Exception e) { // TODO: handle exception

  • JDBCUtils.commitAndClose();//关闭事务 }

*/

Connection conn = null;

try {

//获取到链接

conn = JDBCUtils.getConnection();

//开启事务

conn.setAutoCommit(false);//开启事务

//保存订单

orderDao.savaOrder(conn,order);

//保存订单项

//遍历订单上的每一个购物项

for(OrderItem item:order.getList()) {

orderDao.savaOrderItem(conn,item);

}

//提交事务

conn.commit();

} catch (Exception e) {

// TODO: handle exception

//如果有异常

//回滚事务

conn.rollback();

}

}

}

OrderDao

public interface OrderDao {

void savaOrderItem(Connection conn, OrderItem item) throws SQLException;

void savaOrder(Connection conn, Order order)throws SQLException;

}

public class OrderDaoImpl implements OrderDao {

// 保存订单

@Override

public void savaOrder(Connection conn, Order order) throws SQLException {

// TODO Auto-generated method stub

String sql=“INSERT INTO orders VALUES(?,?,?,?,?,?,?,?)”;

QueryRunner qr=new QueryRunner();

Object[] params={order.getOid(),order.getOrdertime(),order.getTotal(),order.getState(),order.getAddress(),order.getName(),order.getTelephone(),order.getUser().getUid()};

qr.update(conn,sql,params);

}

// 保存订单项

@Override

public void savaOrderItem(Connection conn, OrderItem item) throws SQLException {

String sql=“INSERT INTO orderitem VALUES(?,?,?,?,?)”;

QueryRunner qr=new QueryRunner();

Object[] params={item.getItemid(),item.getQuantity(),item.getTotal(),item.getProduct().getPid(),item.getOrder().getOid()};

qr.update(conn,sql,params);

}

}

修改/jsp/order_info.jsp

在这里插入图片描述

在这里插入图片描述

我的订单查询


原理分析:

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

Runner qr=new QueryRunner();

Object[] params={item.getItemid(),item.getQuantity(),item.getTotal(),item.getProduct().getPid(),item.getOrder().getOid()};

qr.update(conn,sql,params);

}

}

修改/jsp/order_info.jsp

在这里插入图片描述

在这里插入图片描述

我的订单查询


原理分析:

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

[外链图片转存中…(img-xCeySDy9-1714309521836)]

[外链图片转存中…(img-2q945ci1-1714309521836)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Web框架源码图书是指涉及Java Web框架的源码和相关知识的图书。Java Web框架是用于开发Web应用程序的框架,它提供了一系列工具和库来简化开发过程,提高开发效率和程序的可维护性。 首先,对于想要深入了解Java Web框架源码的开发人员来说,一本好的图书是必不可少的。这样的图书通常会详细介绍常见的Java Web框架,如Spring MVC、Struts和JSF。它们会讲解框架的设计原理、核心概念和关键组件,并通过实例和代码示例来展示如何使用这些框架。 其次,一本好的Java Web框架源码图书应该有以下特点: 1. 深入浅出的讲解:图书应通过简单明了的语言和例子来解释框架的工作原理和用法,使读者能够轻松理解框架的核心概念和实现细节。 2. 结合实际案例:图书可以通过实际案例演示框架的使用,这有助于读者更好地理解和应用框架。 3. 源码分析:图书应该对框架的源码进行深入剖析,解释关键类和方法的作用和实现原理,帮助读者更好地理解框架的内部机制。 4. 最佳实践和常见问题:图书应提供最佳实践和常见问题的解决方案,帮助读者在实际开发中避免常见错误和困惑。 总之,一本优秀的Java Web框架源码图书能够为希望深入了解Java Web框架源码的开发人员提供宝贵的学习资源和指导。通过阅读这样的图书,读者可以掌握框架的核心概念和技术,提高自己的开发能力和项目的成功率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值