最近帮朋友写一个简单的商城系统,其中关于订单查询这一块,可以记录一下分享给大家。
一、数据库设计
这里主要贴一下核心的2张表,订单主表和订单详细表,像用户表,购物车表,收货地址表,店铺表之类的就不贴出来了。
1. t_order 订单主表
这里说明一下为什么要冗余下单用户地址,主要是考虑到用户如果删除了收货地址 t_address 表的数据,会出现关联不上,所以实际情况我们不用 address_id 关联收获地址信息。
status状态字段:0未付款、1已付款/待发货、2已发货/待收货、3已收货/待评价、4已评价、5取消订单。暂时不考虑付款后退款的功能。
2.订单详情表 t_order_detail
同上,冗余商品信息表部分字段,目的是防止商家把商品删除,无法关联,所以我们不用 product_id 关联。
二、数据访问层 Mapper
本文其实主要是为了讲这个 mapper xml 的写法
1、Order.java
package com.example.sens.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.example.sens.common.base.BaseEntity;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 订单表
*
* @author 言曌
* @date 2020/12/27 2:10 下午
*/
@Data
@TableName("t_order")
public class Order extends BaseEntity {
/**
* 下单用户ID
*/
private Long userId;
/**
* 总价
*/
private Double totalPrice;
/**
* 地址ID
*/
private Long addressId;
/**
* 订单状态: 0未付款、1已付款/待发货、2已发货/待收货、3已收货/待评价、4已评价、5取消订单
*/
private Integer status;
/**
* 收货地址-收货人姓名(收货地址可能删除,所以这里要记录,不能直接读收货地址表))
*/
private String addressRealName;
/**
* 收货地址-收货(收货地址可能删除,所以这里要记录,不能直接读收货地址表))
*/
private String addressPhone;
/**
* 收货地址详细(收货地址可能删除,所以这里要记录,不能直接读收货地址表))
*/
private String addressDetail;
/**
* 用户信息
*/
@TableField(exist = false)
private User user;
/**
* 店铺名称
*/
@TableField(exist = false)
private Store store;
/**
* 订单详细列表
*/
@TableField(exist = false)
List<OrderDetail> orderDetailList;
}
顺便贴一下父类的代码
BaseEntity.java
package com.example.sens.common.base;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.example.sens.common.constant.CommonConstant;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @author 言曌
* @date 2019-08-07 00:28
*/
@Data
public class BaseEntity implements Serializable {
/**
* ID,自动生成
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 删除状态:1删除,0未删除
*/
@TableField(value = "del_flag")
@TableLogic
private Integer delFlag = CommonConstant.STATUS_NORMAL;
/**
* 创建时间
*/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
2、OrderMapper.java
package com.example.sens.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.sens.entity.Order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author liuyanzhao
*/
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
/**
* 获得该用户的订单记录
*
* @return
*/
List<Order> findByUserId(@Param("userId") Long userId, Page page);
}
3、OrderMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.sens.mapper.OrderMapper">
<resultMap id="BaseResultMap" type="com.example.sens.entity.Order">
<id column="id" property="id"></id>
<result column="user_id" property="userId"></result>
<result column="address_id" property="addressId"></result>
<result column="status" property="status"></result>
<result column="total_price" property="totalPrice"></result>
<result column="address_real_name" property="addressRealName"></result>
<result column="address_phone" property="addressPhone"></result>
<result column="address_detail" property="addressDetail"></result>
<result column="create_time" property="createTime"></result>
<association property="user" javaType="com.example.sens.entity.User">
<id property="id" column="user_id"/>
<result property="userDisplayName" column="user_display_name"/>
</association>
<association property="store" javaType="com.example.sens.entity.Store">
<id property="id" column="store_id"/>
<result property="name" column="store_name"/>
</association>
<collection property="orderDetailList" ofType="com.example.sens.entity.OrderDetail" javaType="java.util.ArrayList">
<id property="id" column="order_detail_id"/>
<result property="productId" column="product_id"/>
<result property="productName" column="product_name"/>
<result property="productPrice" column="product_price"/>
<result property="productThumbnail" column="product_thumbnail"/>
<result property="number" column="number"/>
</collection>
</resultMap>
<select id="findByUserId" resultMap="BaseResultMap">
SELECT
o.id, o.user_id, o.store_id, o.address_id, o.status, o.total_price, o.address_real_name, o.address_phone, o.address_detail, o.create_time,
u.user_display_name,
s.name store_name, s.id store_id,
d.id order_detail_id, d.product_id, d.product_name, d.product_price, d.product_thumbnail, d.number
FROM
t_order o
LEFT JOIN t_user u ON o.user_id = u.id AND u.del_flag = 0
LEFT JOIN t_store s ON o.store_id = s.id AND s.del_flag = 0
LEFT JOIN t_order_detail d ON d.order_id = o.id AND d.del_flag =0
WHERE
o.user_id = #{userId} AND
o.del_flag = 0
</select>
</mapper>
三、web层访问效果
service,web层代码我就不贴了
这里主要给大家看一下最终返回的格式,返回的JSON格式数据如下
[
{
"id":1,
"delFlag":0,
"createTime":"2021-01-10 07:23:21",
"updateTime":null,
"userId":27,
"totalPrice":140,
"addressId":1,
"status":0,
"addressRealName":"CC",
"addressPhone":"13512344221",
"addressDetail":"XXXXXXX",
"user":{
"id":27,
"delFlag":0,
"createTime":null,
"updateTime":null,
"userName":null,
"userDisplayName":"CC",
"idCard":null,
"userAvatar":null,
"userDesc":null,
"status":0,
"email":null,
"phone":null,
"money":null,
"role":null
},
"store":{
"id":1,
"delFlag":0,
"createTime":null,
"updateTime":null,
"userId":null,
"name":"ABC水果平台",
"status":null,
"userDisplayName":null,
"userPhone":null,
"applyTime":null,
"passTime":null
},
"orderDetailList":[
{
"id":1,
"delFlag":0,
"createTime":null,
"updateTime":null,
"orderId":null,
"userId":null,
"productId":1,
"productName":"苹果",
"productPrice":10,
"productThumbnail":"/static/theme/g1/images/1.jpg",
"number":1
},
{
"id":3,
"delFlag":0,
"createTime":null,
"updateTime":null,
"orderId":null,
"userId":null,
"productId":1,
"productName":"苹果3",
"productPrice":30,
"productThumbnail":"/static/theme/g1/images/1.jpg",
"number":3
},
{
"id":2,
"delFlag":0,
"createTime":null,
"updateTime":null,
"orderId":null,
"userId":null,
"productId":1,
"productName":"苹果2",
"productPrice":20,
"productThumbnail":"/static/theme/g1/images/1.jpg",
"number":2
}
]
}
]
这里造的数据是 t_order 一条记录,t_order_detail 三条记录,即在一个店铺创建的一个订单买了三种商品。
页面效果如下(省略html,css,js代码)
该商城还在开发中,基于springboot+mybatis,预计下周末前完成,需要完整代码可以联系博主
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏