订单模块之添加订单之DAO层实现

简介: 快速学习订单模块之添加订单之DAO层实现

开发者学堂课程【Java Web项目实战2:图书商城订单模块之添加订单之DAO层实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/35/detail/782


订单模块之添加订单之DAO层实现


内容简介:

一、生成订单的整体思路

二、如何用代码实现订单生成


一、生成订单的整体思路

生成订单时必然是先对购物车进行一个一键购买后生成一个订单,即真正发起一个订单是在购物车上。


1.点击一键购买后程序流程来到OrderServlet#add()

①创建 Order 对象

*其中订单是通过购物车形成的

*从 session 中获取 cart

*然后使用 cart 来生成 order

*清空购物车

②将对象用来调用 service 的 add(Order order)方法

③保存生成的订单,转发到  /jsos/order/desc.jsp


2.生成订单后创建条目标OrderServlet#add(Order)

操作应该是一个事务

①保存订单

②保存该订单中的所有条目


3.提供方法OrderDao

① addOrder(Order order)

② addOrderItemList(List<OrderItem>orderItemList)(用批处理)


4.显示当前订单/jsps/order/desc.jsp

 

5.生成订单整体流程图如下:

image.png

二、实现生成订单

1.从 DAO 开始,完成第一个功能

添加订单,处理 util 的 Date 转换成 sql 的 Timestamp

public void addOrder(Order order){

 try{

     String sql = “insert into order values(?,?,?,?,?,?)”;

      Timestamp timestamp=new Timestamp(order,getOrdertime(),getTime()):

      Object()parama=(order.getOid(),timestamp,order.getTotal(),

            Order.getState(),order.getOwner().getVid(),

            Order.getAddress());

       qr.update(sql,params);

   } catch (SQLException e);{

      Throw new RuntimeException (e);

}

image.png


插入订单条目

public void addOrderItemList(List<OrderItem>orderItemList) {

QueryRunner类的batch(String sql ,Object[ ] [ ] params),其中params 是多个一位数组,每个一位数组都与 sql 在一起执行一次,多个一维数组就执行多次。

           try{

              String sql = “insert into order values(?,?,?,?,?,?)”;

把 orderItemList 转换成两维数组,把一个 OrderItem 对象转换成一个一维数组。

              Object[][]params=new Object[orderItemList,size()][ ];

循环遍历 orderItemList,使用每个 orderItem 对象 为 params 中每个一位数组赋值

              for (int I =0;i < orderItemList.size();i++){

                 orderItem item = orderItemList.get(i);

                 params[i]=new Object [ ]{item.getIid(),item.getCount(),

                         item.getSubtotal(),item.getOrder().getOid(),

                         item.getBook().getBid());

}

执行批处理

qr.batch(sql,params);

        } catch(SQLException e){

            Throw new RuntimeException(e);

}

image.png

image.png

2.来到 service 中,完成第二个功能

添加订单,需要处理事务

        public void add(Order order){

        }


3.来到 web.serviet,添加方法

添加订单,把 session 中的车用来生成 Order 对象

        public String add(HttpservietRequest requst,HttpServietResponse response)

               throwa ServletException,IOException{

            return null;

         }

相关文章
|
9月前
|
JavaScript
|
数据库连接
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(中)
使用JSP+Servlet+MySQL实现登录注册功能【详细代码】(中)
1139 0
|
关系型数据库 MySQL PHP
configure: error: GD build test failed. Please check the config.log
<p><br></p> <p></p> <p><br></p> <div class="wgt-ask accuse-response line mod-shadow" id="wgt-ask" style="padding:20px 60px 18px; position:relative; z-index:1; line-height:20px; margin-bottom:4p
6117 0
|
7月前
|
存储 数据采集 搜索推荐
使用Java实现智能推荐系统的关键技术
使用Java实现智能推荐系统的关键技术
|
前端开发 PHP
ThinkPHP跨域设置”samesite=none”和“secure”参数的方法和注意事项
ThinkPHP跨域设置”samesite=none”和“secure”参数的方法和注意事项
|
9月前
|
Android开发 UED 开发者
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
【5月更文挑战第15天】UniApp与原生开发各有千秋。UniApp以高效跨平台著称,一套代码覆盖多平台,降低开发成本,适合快速开发简单应用。原生开发则提供优秀性能和用户体验,适合对性能要求高的复杂应用。两者在功能实现和维护上各有优势,开发者需根据项目需求权衡选择。随着技术进步,两者都在不断优化,为移动应用开发带来新机遇。
398 1
【Uniapp 专栏】比较 Uniapp 与原生开发的差异与适用场景
|
Linux PHP
Thinkphp5+FastAdmin配置workerman消息推送(多线程)
Thinkphp5+FastAdmin配置workerman消息推送(多线程)
758 0
|
消息中间件 SQL 存储
基于 Flink + ClickHouse 打造轻量级点击流实时数仓
Flink 和 ClickHouse 分别是实时计算和(近实时)OLAP 领域的翘楚,也是近些年非常火爆的开源框架,很多大厂都在将两者结合使用来构建各种用途的实时平台,效果很好。关于两者的优点就不再赘述,本文来简单介绍笔者团队在点击流实时数仓方面的一点实践经验。
基于 Flink + ClickHouse 打造轻量级点击流实时数仓