购物商城shopping连载(11)

订单模块类创建及配置

购物完成之后,提交订单,生成一个订单
订单表和商品的关系:
订单和商品的关系是多对多,一个订单可以有多个商品,一个商品可以属于多个订单。
如果是多对多的关系,那么建表的时候应该建第三张表(中间表),存订单表和商品表的id。
中间表:订单项表:

这里写图片描述

订单表和商品表是多对多关系,可以通过两个一对多的形式完成多对多的关联关系。即商品对订单项是一对多,订单对订单项也是一对多,两个表对中间表的一对多关系相当于商品和订单表的多对多关系。

这里写图片描述

说下这样处理的好处,如果你把商品表和订单表的关系创建成多对多的关系,中间表只会维护商品id和订单id,中间的订单表的其他字段是不会自动维护的,如果配成一对多,其他自动就可以自动维护。

订单表:

/***
 * 订单表
 * 
 */
@SuppressWarnings("serial")
public class Order implements Serializable {
   
    private long oid;// 订单id
    private Double total; // 总计
    private Date orderTime;// 订单下单时间
    private int state; // 订单状态
    private String name;// 用户名
    private String addr; // 地址
    private String phone;// 用户电话
    // 订单所属用户
    private User user;
    // 订单中包含多个订单项
    private Set<OrderItem> orderItems = new HashSet<OrderItem>();
    //省略setter getter方法

OrderItem订单项表:

@SuppressWarnings("serial")
public class OrderItem implements Serializable{
   
    private long itemid; //订单项id
    private int count; //订单数量
    private Double subtotal; //订单小计
    // 商品对象
    private Product product;
    // 订单对象
    private Order order;
    //省略setter getter方法

Order.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.shopping.order.entity.Order" table="orders">
        <id name="oid">
            <generator class="native"/>
        </id>

        <property name="total"/>
        <property name="orderTime"/>
        <property name="state"/>
        <property name="name"/>
        <property name="phone"/>
        <property name="addr"/>

        <!-- 订单与用户关联配置 -->
        <!-- 一个用户有多个订单 ,多个订单属于一个用户-->
        <many-to-one name="user" lazy="false" class="com.shopping.user.entity.User" column="uid"/>

        <!-- 订单与订单项关联配置 -->
        <!-- 一个订单包含多个订单项 -->
        <set name="orderItems" lazy="false" cascade="save-update">
            <key column="oid"/>
            <one-to-many class="com.shopping.order.entity.OrderItem"/>
        </set>
    </class>
</hibernate-mapping>

OrderItem.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.shopping.order.entity.OrderItem" table="orderitem">
        <id name="itemid">
            <generator class="native"/>
        </id>

        <property name="count"/>
        <property name="subtotal"/>

        <!-- 订单项是多方, product是一方-->
        <many-to-one name="product" lazy="false" class="com.shopping.product.entity.Product" column="pid"></many-to-one>

        <!-- 订单项是多方 ,order是一方-->
        <many-to-one name="order" class="com.shopping.order.entity.Order" column="oid"/>
    </class>
</hibernate-mapping>

这里写图片描述

这里说明一下,在Oder中用到了User对象,表示多个订单属于一个用户,如果你不需要在User中需要Order,则不用写以下代码:

Set<Order> orders = new HashSet<Order>();
//用到就写,不用就可以不用写,不会影响建表

订单模块跳转到订单页面

在购物车页面点击提交订单的时候:

这里写图片描述

应该跳转到订单页面,订单页面见上面第一张图。

                        <a href="${ pageContext.request.contextPath }/order_saveOrder.do" id="submit" class="submit">提交订单</a>

OrderAction:

package com.shopping.order.action;

import org.hibernate.criterion.Order;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.shopping.base.BaseAction;

@SuppressWarnings("serial")
@Controller
@Scope("prototype")
public class 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值