博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目阶段六:订单模块的数据库准备与dao、service层
阅读量:3964 次
发布时间:2019-05-24

本文共 6693 字,大约阅读时间需要 22 分钟。

1、订单模块的分析

在这里插入图片描述

2、订单模块的实现

2.1、创建订单模块的数据库表

drop table if exists t_order;create table t_order(    order_id varchar(50) primary key,    create_time datetime,    price decimal(11,2),    count int,    status int,    user_id int,    foreign key(user_id) references t_user(id));
drop table if exists t_order_itemcreate table t_order_item(    id int primary key auto_increment,    `name` varchar(100),    `count` int,    price decimal(11,2);    total_price decimal(11,2),    order_id varchar(50),    foreign key(`order_id`) references t_order(`order_id`));

2.2、创建订单模块的数据模型

订单:

public class Order {
private String orderId;//订单编号 private Date createTime;//创建订单时间 private BigDecimal price;//订单价格 // 0未发货,1已发货,2表示已签收 private Integer status = 0;//订单状态 private Integer userId;//该订单是哪个用户的,用户的ID private Integer count;//订单里商品数量

订单项:

public class OrderItem {
private Integer id; private String name; private Integer count; private BigDecimal price; private BigDecimal totalPrice; private String orderId;

2.3、编写生成订单(去结账)模块的 Dao 程序和测试

OrderDao 接口 :

/** * 保存订单 * @param order 保存订单的数据 */int saveOrder(Order order);

OrderDao 实现 :

public class OrderDaoImpl extends BaseDao implements OrderDao {
@Overridepublic int saveOrder(Order order) {
String sql = "insert into t_order(order_id,create_time,price,count,status,user_id) values (?,?,?,?,?,?)"; return upDate(sql,order.getOrderId(),order.getCreateTime(),order.getPrice(),order.getCount(),order.getStatus(),order.getUserId());}OrderDaoTest:public class OrderDaoTest {
private OrderDao orderDao = new OrderDaoImpl(); @Test public void saveOrder() {
orderDao.saveOrder(new Order("123456",new Date(),new BigDecimal(100),0,1)); }

OrderItemDao 接口 :

public interface OrderItemDao {
/** * 保存订单项(订单明细 * @param orderItem * @return */ int saveOrderItem(OrderItem orderItem);

OrderItemDao 实现 :

public class OrderItemDaoImpl extends BaseDao implements OrderItemDao {
@Override public int saveOrderItem(OrderItem orderItem) {
String sql = "insert into t_order_item(`name`,`count`,`price`,`total_price`,`order_id`) values(?,?,?,?,?)"; return upDate(sql,orderItem.getName(),orderItem.getCount(),orderItem.getPrice(),orderItem.getTotalPrice(),orderItem.getOrderId()); }

OrderItemDaoTest:

public class OrderItemDaoTest {
OrderItemDao orderItemDao = new OrderItemDaoImpl(); @Test public void saveOrderItem() {
orderItemDao.saveOrderItem(new OrderItem(null,"安徒生童话",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); orderItemDao.saveOrderItem(new OrderItem(null,"java从入门到精通",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); orderItemDao.saveOrderItem(new OrderItem(null,"javaScript从入门到精通",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); orderItemDao.saveOrderItem(new OrderItem(null,"Netty入门",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); }

2.4、编写生成订单(去结账)模块的 Service 和测试

OrderService 接口:

public interface OrderService {
/** * 生成订单 * @param cart 由哪个购物车生成 * @param userId 由哪个用户生成 * @return */ String creatOrder(Cart cart,Integer userId);}

OrderService 实现类 :

public class OrderServiceImpl implements OrderService {
private OrderDao orderDao = new OrderDaoImpl(); private OrderItemDao orderItemDao = new OrderItemDaoImpl(); private BookDao bookDao = new BookDaoImpl(); @Override public String creatOrder(Cart cart, Integer userId) {
// 订单号===唯一性 String orderId = System.currentTimeMillis() + "" + userId; // 创建一个订单对象 Order order = new Order(orderId,new Date(),cart.getTotalPrice(),0,userId,cart.getTotalCount()); // 保存订单 orderDao.saveOrder(order); // 遍历购物车中每一个商品项转换成为订单项保存到数据库 for (Map.Entry
entry : cart.getItems().entrySet()) {
// 获取每一个购物车中的商品项 CartItem cartItem = entry.getValue(); // 转换为每一个订单项 OrderItem orderItem = new OrderItem(null,cartItem.getName(),cartItem.getCount(),cartItem.getPrice(),cartItem.getTotalPrice(),orderId); // 保存订单项到数据库 orderItemDao.saveOrderItem(orderItem); // 更新库存和销量 Book book = bookDao.queryBookById(cartItem.getId()); book.setSales(book.getSales() + cartItem.getCount()); book.setStock(book.getStock() - cartItem.getCount()); bookDao.updateBook(book); } // 清空购物车 cart.clear(); return orderId; }}

测试 :

public class OrderServiceTest {
private OrderService orderService = new OrderServiceImpl(); @Test public void creatOrder() {
Cart cart = new Cart(); cart.addItem(new CartItem(1, "java从入门到精通", 1, new BigDecimal(1000),new BigDecimal(1000))); cart.addItem(new CartItem(1, "java从入门到精通", 1, new BigDecimal(1000),new BigDecimal(1000))); cart.addItem(new CartItem(2, "数据结构与算法", 1, new BigDecimal(100),new BigDecimal(100))); String orderId = orderService.creatOrder(cart, 1); System.out.println("该订单编号是:" + orderId); }

2.5、编写订单模块的 web 层和页面联调

ClientOrderServlet 程序:

public class OrderServlet extends BaseServlet {
private OrderService orderService = new OrderServiceImpl(); /** * 生成订单,结账 * @param req * @param resp * @throws ServletException * @throws IOException */ protected void createOrder(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 先获取Cart购物车对象 Cart cart = (Cart) req.getSession().getAttribute("cart"); // 获取Userid User loginUser = (User) req.getSession().getAttribute("user");// if(loginUser == null){
// req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);// return;// } Integer userId = loginUser.getId(); // 调用orderService.createOrder(Cart,Userid);生成订单 String orderId = orderService.creatOrder(cart, userId); req.getSession().setAttribute("orderId",orderId); resp.sendRedirect(req.getContextPath() + "/pages/cart/checkout.jsp"); }}

web配置:

ClientOrderServlet
loey.web.ClientOrderServlet
ClientOrderServlet
/client/orderServlet

修改 pages/cart/cart.jsp 页面,结账的请求地址:

去结账//给去结账绑定单击事件$("#payOrder").click(function () {	if(${empty sessionScope.user}){		alert("你还未登录,请先登录~");		this.href = "http://localhost:8080/MyBookStore/pages/user/login.jsp";	}else{		this.href = "http://localhost:8080/MyBookStore/client/orderServlet?action=createOrder";	}});

修改 pages/cart/checkout.jsp 页面,输出订单号:

你的订单已结算,订单号为${sessionScope.orderId}

转载地址:http://fquki.baihongyu.com/

你可能感兴趣的文章
简单介绍如何使用robotium进行自动化测试
查看>>
Python之操作XML文件
查看>>
eclipse+ADT 进行android应用签名详解
查看>>
Robotium只有apk文件例如Music.apk
查看>>
UI自动化测试框架对比(二)
查看>>
Selenium-webdriver系列教程(9)——如何操作select下拉框
查看>>
Selenium-webdriver系列教程(10)——如何智能的等待页面加载完成
查看>>
Robotium测试NotePad(一)
查看>>
Robotium测试NotePad(二) //测试添加文本
查看>>
ksh 多进程
查看>>
ksh 命令分隔符
查看>>
Linux 精萃
查看>>
sed 精萃
查看>>
awk 精萃
查看>>
awk 注释
查看>>
GROUPING SETS、ROLLUP、CUBE
查看>>
数据类型和变量
查看>>
表连接(JOIN)
查看>>
游标(Cursor)
查看>>
复合语句(compound statement)
查看>>