Spring Boot点餐系统实战(6)–买家订单dao层

本文介绍买家订单( order_master 表和 order_detail 表)部分的 dao 层开发。 其中一个买家下了一个订单(order_master表),一个订单中可能会有多个商品(order_detail表),这个两个表是通过 order_id 这个字段来关联的。  

本文新关键词

...其他的继承上一节  

一、开发准备

1、数据库结构 order_master 表结构 order_master 表最终的测试数据   order_detail 表结构 order_detail 表最终的测试数据   2、最终文件结构  

二、新建实体类

1、OrderMaster.java
  1. package com.liuyanzhao.sell.entity;
  2. import com.liuyanzhao.sell.enums.OrderStatusEnum;
  3. import com.liuyanzhao.sell.enums.PayStatusEnum;
  4. import lombok.Data;
  5. import org.hibernate.annotations.DynamicUpdate;
  6. import javax.persistence.Entity;
  7. import javax.persistence.Id;
  8. import java.math.BigDecimal;
  9. import java.util.Date;
  10. /**
  11.  * @Author: 言曌
  12.  * @Date: 2017/11/12
  13.  * @Time: 下午9:06
  14.  */
  15. @Entity
  16. @Data
  17. @DynamicUpdate
  18. public class OrderMaster {
  19.     //订单编号
  20.     @Id
  21.     private String orderId;
  22.     //买家名字
  23.     private String buyerName;
  24.     //买家电话
  25.     private String buyerPhone;
  26.     //买家地址
  27.     private String buyerAddress;
  28.     //买家微信Openid
  29.     private String buyerOpenid;
  30.     //订单总金额
  31.     private BigDecimal orderAmount;
  32.     //订单状态,默认为0新订单
  33.     private Integer orderStatus = OrderStatusEnum.NEW.getCode();
  34.     //支付状态,默认为0未支付
  35.     private Integer payStatus = PayStatusEnum.WAIT.getCode();
  36.     //订单创建时间
  37.     private Date createTime;
  38.     //订单更新时间
  39.     private Date updateTime;
  40. }
  注意:第 44 行和第 47 行使用的两个枚举类型,第三步会介绍。 同时,订单状态和支付状态设置默认值,所以后面的 Dao 里就不需要给其赋值。   2、OrderDetail.java
  1. package com.liuyanzhao.sell.entity;
  2. import lombok.Data;
  3. import javax.persistence.Entity;
  4. import javax.persistence.Id;
  5. import java.math.BigDecimal;
  6. /**
  7.  * @Author: 言曌
  8.  * @Date: 2017/11/13
  9.  * @Time: 上午9:33
  10.  */
  11. @Entity
  12. @Data
  13. public class OrderDetail {
  14.     //订单详情id
  15.     @Id
  16.     private String detailId;
  17.     //订单id
  18.     private String orderId;
  19.     //商品id
  20.     private String productId;
  21.     //商品名称
  22.     private String productName;
  23.     //单价
  24.     private BigDecimal productPrice;
  25.     //商品数量
  26.     private Integer productQuantity;
  27.     //商品小图
  28.     private String productIcon;
  29. }
 

三、新建枚举

1、OrderStatusEnum.java
  1. package com.liuyanzhao.sell.enums;
  2. import lombok.Getter;
  3. /**
  4.  * @Author: 言曌
  5.  * @Date: 2017/11/12
  6.  * @Time: 下午9:35
  7.  */
  8. @Getter
  9. public enum OrderStatusEnum {
  10.     NEW(0,"新订单"),
  11.     FINISHED(1,"完结"),
  12.     CANCEL(2,"已取消")
  13.     ;
  14.     private Integer code;
  15.     private String message;
  16.     OrderStatusEnum(Integer code,String message) {
  17.         this.code = code;
  18.         this.message = message;
  19.     }
  20. }
  2、PayStauts.java
  1. package com.liuyanzhao.sell.enums;
  2. import lombok.Getter;
  3. /**
  4.  * @Author: 言曌
  5.  * @Date: 2017/11/12
  6.  * @Time: 下午9:40
  7.  */
  8. @Getter
  9. public enum PayStatusEnum {
  10.     WAIT(0,"未支付"),
  11.     SUCCESS(1,"支持成功")
  12.     ;
  13.     private Integer code;
  14.     private String message;
  15.     PayStatusEnum(Integer code,String message) {
  16.         this.code = code;
  17.         this.message = message;
  18.     }
  19. }
  这两个枚举类型是和上面第二步呼应的,使用枚举避免我们出错,也方便管理。  

四、Dao 层的创建

1、OrderMasterDao.java
  1. package com.liuyanzhao.sell.dao;
  2. import com.liuyanzhao.sell.entity.OrderMaster;
  3. import org.springframework.data.domain.Page;
  4. import org.springframework.data.domain.Pageable;
  5. import org.springframework.data.jpa.repository.JpaRepository;
  6. /**
  7.  * @Author: 言曌
  8.  * @Date: 2017/11/13
  9.  * @Time: 上午9:38
  10.  */
  11. public interface OrderMasterDao extends JpaRepository<OrderMaster,String>{
  12.     Page<OrderMaster> findByBuyerOpenid(String buyerOpenid, Pageable pageable);
  13. }
这里自定义的一个方法:根据买家的openid(相当于账号的意思)来查询订单列表,并使用分页。   2、OrderDetailDao.java
  1. package com.liuyanzhao.sell.dao;
  2. import com.liuyanzhao.sell.entity.OrderDetail;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import java.util.List;
  5. /**
  6.  * @Author: 言曌
  7.  * @Date: 2017/11/13
  8.  * @Time: 上午9:42
  9.  */
  10. public interface OrderDetailDao extends JpaRepository<OrderDetail,String> {
  11.     List<OrderDetail> findByOrderId(String orderId);
  12. }
这里自定义的一个方法,根据订单id来查找订单详情列表,不分页  

五、Dao 层的测试

1、OrderMasterDaoTest.java
  1. package com.liuyanzhao.sell.dao;
  2. import com.liuyanzhao.sell.entity.OrderMaster;
  3. import org.junit.Assert;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.data.domain.Page;
  9. import org.springframework.data.domain.PageRequest;
  10. import org.springframework.test.context.junit4.SpringRunner;
  11. import java.math.BigDecimal;
  12. /**
  13.  * @Author: 言曌
  14.  * @Date: 2017/11/13
  15.  * @Time: 上午9:44
  16.  */
  17. @RunWith(SpringRunner.class)
  18. @SpringBootTest
  19. public class OrderMasterDaoTest {
  20.     @Autowired
  21.     private OrderMasterDao dao;
  22.     private final String OPENID = "110100";
  23.     @Test
  24.     public void saveTest() {
  25.         OrderMaster orderMaster = new OrderMaster();
  26.         orderMaster.setOrderId("2");
  27.         orderMaster.setBuyerName("Jack");
  28.         orderMaster.setBuyerPhone("13114515512");
  29.         orderMaster.setBuyerAddress("黄土高原");
  30.         orderMaster.setBuyerOpenid(OPENID);
  31.         orderMaster.setOrderAmount(new BigDecimal(12.5));
  32.         System.out.println(orderMaster);
  33.         OrderMaster result = dao.save(orderMaster);
  34.         Assert.assertNotNull(result);
  35.     }
  36.     @Test
  37.     public void findByBuyerOpenid() throws Exception {
  38.         PageRequest request = new PageRequest(0,2);
  39.         Page<OrderMaster> result =  dao.findByBuyerOpenid(OPENID,request);
  40.         Assert.assertNotEquals(0,result.getTotalElements());
  41.     }
  42. }
  2、OrderDetailDaoTest.java
  1. package com.liuyanzhao.sell.dao;
  2. import com.liuyanzhao.sell.entity.OrderDetail;
  3. import org.junit.Assert;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. import java.math.BigDecimal;
  10. import java.util.List;
  11. /**
  12.  * @Author: 言曌
  13.  * @Date: 2017/11/13
  14.  * @Time: 上午10:29
  15.  */
  16. @RunWith(SpringRunner.class)
  17. @SpringBootTest
  18. public class OrderDetailDaoTest {
  19.     @Autowired
  20.     private OrderDetailDao dao;
  21.     @Test
  22.     public void saveTest() {
  23.         OrderDetail orderDetail = new OrderDetail();
  24.         orderDetail.setDetailId("2");
  25.         orderDetail.setOrderId("332");
  26.         orderDetail.setProductIcon("11111.jpg");
  27.         orderDetail.setProductId("22");
  28.         orderDetail.setProductPrice(new BigDecimal("7.0"));
  29.         orderDetail.setProductQuantity(2);
  30.         orderDetail.setProductName("小鸡腿");
  31.         dao.save(orderDetail);
  32.         Assert.assertNotNull(orderDetail);
  33.     }
  34.     @Test
  35.     public void findByOrderId() throws Exception {
  36.         List<OrderDetail> orderDetailList = dao.findByOrderId("1");
  37.         Assert.assertNotEquals(0,orderDetailList.size());
  38.     }
  39. }
  对于第二个测试,我们在第45行打个断点,然后Debug,可以看到该订单查到了两条详情     本文地址:https://liuyanzhao.com/6685.html

发表评论

目前评论:1