orderItem (vo,item)

package cn.itcast.shop.order.vo;

import cn.itcast.shop.product.vo.Product;

public class OrderItem {
    /*CREATE TABLE `orderitem` (
              `itemid` int(11) NOT NULL AUTO_INCREMENT,
              `count` int(11) DEFAULT NULL,
              `subtotal` double DEFAULT NULL,
              `pid` int(11) DEFAULT NULL,
              `oid` int(11) DEFAULT NULL,
              PRIMARY KEY (`itemid`),
              KEY `FKE8B2AB6166C01961` (`oid`),
              KEY `FKE8B2AB6171DB7AE4` (`pid`),
              CONSTRAINT `FKE8B2AB6166C01961` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`),
              CONSTRAINT `FKE8B2AB6171DB7AE4` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`)
            ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
*/
        private Integer itemid;
        private Integer count;
        private Double subtotal;
        // 商品外键:对象
        private Product product;
        //订单的外键
        private Order order;
        public Integer getItemid() {
            return itemid;
        }
        public void setItemid(Integer itemid) {
            this.itemid = itemid;
        }
        public Integer getCount() {
            return count;
        }
        public void setCount(Integer count) {
            this.count = count;
        }
        public Double getSubtotal() {
            return subtotal;
        }
        public void setSubtotal(Double subtotal) {
            this.subtotal = subtotal;
        }
        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;
        }
        
}


<?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="cn.itcast.shop.order.vo.OrderItem"  table="orderitem">
                 <id name="itemid">
                     <generator class="native"></generator>
                 </id>
                 <property name="count"></property>
                 <property name="subtotal"></property>
         <!-- private Product product;
        private Order order; -->
                <many-to-one name="product" class="cn.itcast.shop.product.vo.Product" column="pid"></many-to-one>
                <many-to-one name="order" class="cn.itcast.shop.order.vo.Order" column="oid"></many-to-one>
         </class>
 </hibernate-mapping>


OrderItem 是一个用于表示订单中商品项的实体类。在生成订单的场景中,涉及三个表(Products,Orders,OrderItem),OrderItem 起到连接订单(Order)和商品(Product)的作用。 ### OrderItem 的定义 ```java public class OrderItem { private Order order; // 订单 private Product product; // 商品 private int buynum; // 购物数量 } ``` 该类包含三个属性: - `order`:表示该订单项所属的订单,类型为 `Order` 类。 - `product`:表示该订单项对应的商品,类型为 `Product` 类。 - `buynum`:表示该商品的购买数量,类型为 `int`。 ### OrderItem 的使用 在实际使用中,OrderItem 类通常用于存储和管理订单中的具体商品信息。以下是一个简单的使用示例: ```java import java.util.ArrayList; import java.util.Date; import java.util.List; 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; // 构造函数、getter 和 setter 方法 public Order(String id, double money, String receiverAddress, String receiverName, String receiverPhone, int paystate, Date ordertime, int userid) { this.id = id; this.money = money; this.receiverAddress = receiverAddress; this.receiverName = receiverName; this.receiverPhone = receiverPhone; this.paystate = paystate; this.ordertime = ordertime; this.userid = userid; this.orderItems = new ArrayList<>(); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); } // 其他方法... } class Product { private String id; // 商品编号 private String name; // 名称 private double price; // 价格 private String category; // 分类 private int pnum; // 数量 private String imgurl; // 图片路径 private String description; // 描述 // 构造函数、getter 和 setter 方法 public Product(String id, String name, double price, String category, int pnum, String imgurl, String description) { this.id = id; this.name = name; this.price = price; this.category = category; this.pnum = pnum; this.imgurl = imgurl; this.description = description; } // 其他方法... } public class Main { public static void main(String[] args) { // 创建订单 Order order = new Order("1", 100.0, "Address", "Name", "Phone", 0, new Date(), 1); // 创建商品 Product product = new Product("P001", "Product Name", 50.0, "Category", 10, "image.jpg", "Description"); // 创建订单项 OrderItem orderItem = new OrderItem(); orderItem.setOrder(order); orderItem.setProduct(product); orderItem.setBuynum(2); // 将订单项添加到订单中 order.addOrderItem(orderItem); // 可以进一步处理订单和订单项 } } ``` ### OrderItem 在系统中的应用 在数据库层面,为了优化对 OrderItem 数据的查询和约束,通常会创建索引。例如,为 OrderItem 类型创建联合唯一索引(orderId + productId)并优化 status 查询,相关配置如下: ```xml <itemtype code="OrderItem" autocreate="true" generate="true"> <attributes> <attribute qualifier="orderId" type="java.lang.String" /> <attribute qualifier="productId" type="java.lang.String" /> <attribute qualifier="status" type="java.lang.String" /> </attributes> <indexes> <!-- 联合唯一约束 --> <index name="OrderProduct_UNIQUE" unique="true"> <key attribute="orderId" /> <key attribute="productId" /> </index> <!-- 普通索引优化查询 --> <index name="Status_Index"> <key attribute="status" /> </index> </indexes> </itemtype> ``` 通过创建联合唯一索引 `OrderProduct_UNIQUE`,可以确保每个订单中的每个商品只出现一次;创建普通索引 `Status_Index` 可以优化对 `status` 字段的查询性能 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值