先来看看order表的结构
目录
类(Order)实现
首先是实现实体类,具体操作参考前面的博客( 商城后台之user表的实现(二)---(1))
然后别忘了加
@GeneratedValue(strategy = GenerationType.IDENTITY)
如果没有加的话,后面运行的时候会报找不到主键的错误,
@GeneratedValue注释定义了标识字段生成方式。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
类(OrderBO)实现 ---1
注解@Service
有了此注解,应用程序将会自动扫描此类
类OrderDAO实现
DAO 里的 @Transactional
是表示这个 DAO 里的方法有事务,即单表的操作也有事务
基础的 Repository 提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。它们的继承关系如下:
Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类
(1) CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法
(2)PagingAndSortingRepository: 继承 CrudRepository,实现了一组分页排序相关的方法
(3)JpaRepository: 继承 PagingAndSortingRepository,实现一组 JPA 规范相关的方法
ctrl+鼠标左键点击jpaRepository,即可查看相关的方法
补充一下:
在这里写个查询单一数据的方法:
Order findOrderById(Long orderId);
类(OrderBO)CRUD的实现 ---2
@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
Java代码 收藏代码
@Resource(name="baseDao")
private BaseDao baseDao;
首先,写一下create方法,先看一下jpaReposity的源码:
Order create(long userId, long productId, Long orderNo, Integer payment, Integer paymentType, Integer postage, Integer status, Timestamp paymentTime,Timestamp sendTime,Timestamp endTime,Timestamp closeTime){
Order order = new Order();
order.setUserId(userId);
order.setProductId(productId);
order.setOrderNo(orderNo);
order.setPayment(payment);
order.setPaymentType(paymentType);
order.setPostage(postage);
order.setStatus(status);
order.setPaymentTime(paymentTime);
order.setSendTime(sendTime);
order.setEndTime(endTime);
order.setCloseTime(closeTime);
return orderDAO.save(order);
}
其次,写查询单一数据的getById方法:
Order getById(Long order){
return orderDAO.findOrderById(order);
}
然后写一个查询所有数据的getOrderList方法:
List<Order> getOrderList(){
return orderDAO.findAll();
}
再然后写删除的方法deleteOrder:
void deleteOrder(Long orderId){
Order order = orderDAO.findOrderById(orderId);
if( orderId!=0){
orderDAO.delete(order);
}
}
还有一个更新方法,我需要在OrderRequest重新写一遍bean
Order updateOrder(Long orderId, OrderRequestDTO body){
Order order = orderDAO.findOrderById(orderId);
if(body.getCloseTime() != null){
order.setCloseTime(body.getCloseTime());
}
if(body.getEndTime() != null){
order.setEndTime(body.getEndTime());
}
if(body.getOrderNo() != null){
order.setOrderNo(body.getOrderNo());
}
if(body.getPayment()!=null){
order.setPayment(body.getPayment());
}
if(body.getPaymentTime()!=null){
order.setPaymentTime(body.getPaymentTime());
}
if(body.getPostage()!=null){
order.setPostage(body.getPostage());
}
if(body.getPaymentType()!=null){
order.setPaymentType(body.getPaymentType());
}
if(body.getSendTime()!=null){
order.setSendTime(body.getSendTime());
}
if(body.getStatus()!=null){
order.setStatus(body.getStatus());
}
order=orderDAO.save(order);
return order;
}
类(OrderRequestDTO)的实现
更新的方法会调用这里的get方法,注意,这里是没有OrderId的,更新数据并不需要更新id,所以没有写,剩下的大致跟bean差不多
package com.wayknew.demo.order.request;
import java.sql.Timestamp;
public class OrderRequestDTO {
private long userId;
private long productId;
private Long orderNo;
private Integer payment;
private Integer paymentType;
private Integer postage;
private Integer status;
private Timestamp paymentTime;
private Timestamp sendTime;
private Timestamp endTime;
private Timestamp closeTime;
private Timestamp createdAt;
private Timestamp updatedAt;
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public long getProductId() {
return productId;
}
public void setProductId(long productId) {
this.productId = productId;
}
public Long getOrderNo() {
return orderNo;
}
public void setOrderNo(Long orderNo) {
this.orderNo = orderNo;
}
public Integer getPayment() {
return payment;
}
public void setPayment(Integer payment) {
this.payment = payment;
}
public Integer getPaymentType() {
return paymentType;
}
public void setPaymentType(Integer paymentType) {
this.paymentType = paymentType;
}
public Integer getPostage() {
return postage;
}
public void setPostage(Integer postage) {
this.postage = postage;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Timestamp getPaymentTime() {
return paymentTime;
}
public void setPaymentTime(Timestamp paymentTime) {
this.paymentTime = paymentTime;
}
public Timestamp getSendTime() {
return sendTime;
}
public void setSendTime(Timestamp sendTime) {
this.sendTime = sendTime;
}
public Timestamp getEndTime() {
return endTime;
}
public void setEndTime(Timestamp endTime) {
this.endTime = endTime;
}
public Timestamp getCloseTime() {
return closeTime;
}
public void setCloseTime(Timestamp closeTime) {
this.closeTime = closeTime;
}
public Timestamp getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Timestamp createdAt) {
this.createdAt = createdAt;
}
public Timestamp getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Timestamp updatedAt) {
this.updatedAt = updatedAt;
}
}
类(OrderDTO)的实现
package com.wayknew.demo.order;
import com.alibaba.fastjson.annotation.JSONField;
import javax.persistence.*;
import java.sql.Timestamp;
public class OrderDTO {
private long orderId;
private long userId;
private long productId;
private Long orderNo;
private Integer payment;
private Integer paymentType;
private Integer postage;
private Integer status;
private Timestamp paymentTime;
private Timestamp sendTime;
private Timestamp endTime;
private Timestamp closeTime;
@JSONField(format = "yyyy-MM-dd HH:mm")
private Timestamp createdAt;
@JSONField(format = "yyyy-MM-dd HH:mm")
private Timestamp updatedAt;
public long getOrderId() {
return orderId;
}
public void setOrderId(long orderId) {
this.orderId = orderId;
}
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public long getProductId() {
return productId;
}
public void setProductId(long productId) {
this.productId = productId;
}
public Long getOrderNo() {
return orderNo;
}
public void setOrderNo(Long orderNo) {
this.orderNo = orderNo;
}
public Integer getPayment() {
return payment;
}
public void setPayment(Integer payment) {
this.payment = payment;
}
public Integer getPaymentType() {
return paymentType;
}
public void setPaymentType(Integer paymentType) {
this.paymentType = paymentType;
}
public Integer getPostage() {
return postage;
}
public void setPostage(Integer postage) {
this.postage = postage;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Timestamp getPaymentTime() {
return paymentTime;
}
public void setPaymentTime(Timestamp paymentTime) {
this.paymentTime = paymentTime;
}
public Timestamp getSendTime() {
return sendTime;
}
public void setSendTime(Timestamp sendTime) {
this.sendTime = sendTime;
}
public Timestamp getEndTime() {
return endTime;
}
public void setEndTime(Timestamp endTime) {
this.endTime = endTime;
}
public Timestamp getCloseTime() {
return closeTime;
}
public void setCloseTime(Timestamp closeTime) {
this.closeTime = closeTime;
}
public Timestamp getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Timestamp createdAt) {
this.createdAt = createdAt;
}
public Timestamp getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Timestamp updatedAt) {
this.updatedAt = updatedAt;
}
}
类(OrderResponseDTO)的实现
package com.wayknew.demo.order.response; import com.wayknew.demo.order.OrderDTO; import java.util.List; public class OrderResponseDTO { private Integer code; private String message; private OrderDTO order; private List<OrderDTO> orders; public List<OrderDTO> getOrders() { return orders; } public void setOrders(List<OrderDTO> orders) { this.orders = orders; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public OrderDTO getOrder() { return order; } public void setOrder(OrderDTO order) { this.order = order; } }
类(OrderListResponseDTO)的实现
package com.wayknew.demo.order.response; import com.wayknew.demo.order.OrderDTO; import java.util.List; public class OrderListResponseDTO { private Integer code; private String message; private List<OrderDTO> orders; public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public List<OrderDTO> getOrders() { return orders; } public void setOrders(List<OrderDTO> orders) { this.orders = orders; } }
类(OrderResponseDTO)的实现
package com.wayknew.demo.order.response; import com.wayknew.demo.order.OrderDTO; import java.util.List; public class OrderResponseDTO { private Integer code; private String message; private OrderDTO order; private List<OrderDTO> orders; public List<OrderDTO> getOrders() { return orders; } public void setOrders(List<OrderDTO> orders) { this.orders = orders; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public OrderDTO getOrder() { return order; } public void setOrder(OrderDTO order) { this.order = order; } }
暂且不说这两个类的作用,我们来看看后续调用这两个类是怎么用的
类(OrderFactory)的实现
package com.wayknew.demo.order;
import com.sun.javafx.scene.control.skin.IntegerFieldSkin;
import com.wayknew.demo.order.response.OrderResponseDTO;
import java.util.ArrayList;
import java.util.List;
public class OrderFactory {
static OrderDTO toOrderDTO(Order order) {
OrderDTO orderDTO = new OrderDTO();
orderDTO.setOrderId(order.getOrderId());
orderDTO.setUserId(order.getUserId());
orderDTO.setProductId(order.getProductId());
orderDTO.setCloseTime(order.getCloseTime());
orderDTO.setEndTime(order.getEndTime());
orderDTO.setOrderNo(order.getOrderNo());
orderDTO.setPayment(order.getPayment());
orderDTO.setPaymentTime(order.getPaymentTime());
orderDTO.setPostage(order.getPostage());
orderDTO.setSendTime(order.getSendTime());
orderDTO.setPaymentType(order.getPaymentType());
orderDTO.setStatus(order.getStatus());
orderDTO.setCreatedAt(order.getCreatedAt());
orderDTO.setUpdatedAt(order.getUpdatedAt());
return orderDTO;
}
static OrderResponseDTO successResponse(){
OrderResponseDTO res = new OrderResponseDTO();
res.setCode(0);
res.setMessage("success");
return res;
}
static OrderResponseDTO successResponse(Order order){
OrderDTO orderDTO = toOrderDTO(order);
OrderResponseDTO res = new OrderResponseDTO();
res.setCode(0);
res.setMessage("success");
res.setOrder(orderDTO);
return res;
}
static OrderResponseDTO successResponse(List<Order> orders){
List<OrderDTO> orderDTOList = new ArrayList<>();
orders.forEach(order -> {
orderDTOList.add(toOrderDTO(order));
});
OrderResponseDTO res = new OrderResponseDTO();
res.setCode(0);
res.setMessage("success");
res.setOrders(orderDTOList);
return res;
}
static OrderResponseDTO errorResponse(Integer code, String message){
OrderResponseDTO res = new OrderResponseDTO();
res.setCode(code);
res.setMessage(message);
return res;
}
}
类(OrderController)的实现
package com.wayknew.demo.order; import com.wayknew.demo.order.request.OrderRequestDTO; import com.wayknew.demo.order.response.OrderResponseDTO; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping(value="/api/v2") public class OrderController { @Resource private OrderBO orderBO; @RequestMapping(value = "/order",method = RequestMethod.POST) public OrderResponseDTO createOrder(@RequestBody OrderRequestDTO body){ try{ Order order = orderBO.create(body.getUserId(),body.getProductId(),body.getOrderNo(),body.getPayment(),body.getPaymentType(),body.getPostage(),body.getStatus(),body.getPaymentTime(),body.getSendTime(),body.getEndTime(),body.getCloseTime()); return OrderFactory.successResponse(order); }catch (Exception e){ return OrderFactory.errorResponse(1,e.toString()); } } @RequestMapping(value = "/order", method = RequestMethod.GET) public OrderResponseDTO getOrderList() { try { List<Order> orders = orderBO.getOrderList(); return OrderFactory.successResponse(orders); } catch (Exception e) { return OrderFactory.errorResponse(2, e.toString()); } } @RequestMapping(value = "/order/{orderId}", method = RequestMethod.GET) public OrderResponseDTO getOrderById(@PathVariable("orderId") Long orderId) { try { Order order = orderBO.getById(orderId); return OrderFactory.successResponse(order); } catch (Exception e) { return OrderFactory.errorResponse(3, e.toString()); } } @RequestMapping(value = "/order/{orderId}", method = RequestMethod.PATCH) public OrderResponseDTO updateOrder(@PathVariable("orderId") Long orderId, @RequestBody OrderRequestDTO body) { try { Order order = orderBO.updateOrder(orderId, body); return OrderFactory.successResponse(order); } catch (Exception e) { return OrderFactory.errorResponse(3, e.toString()); } } @RequestMapping(value = "/order/{orderId}", method = RequestMethod.DELETE) public OrderResponseDTO deleteOrder(@PathVariable("orderId") Long orderId) { try { orderBO.deleteOrder(orderId); return OrderFactory.successResponse(); } catch (Exception e) { return OrderFactory.errorResponse(3, e.toString()); } } }
之后就可以用postman去测试crud了