查询我的订单

  • 需求和技术分析
  • 步骤分析
  • 代码实现

需求和技术分析

**需求:**点击页面上的“我的订单”,分页展示我所有的订单(将所属的订单项也要查询出来)
技术分析:

  1. 多表查询

    • 内连接
    • 外连接
    • 子查询

步骤分析

  1. 修改head.jsp的连接,我的订单:${path}/order/findAll
  2. 在OrderServlet中编写findAll方法
    • 获取用户(session)
    • 获取当前页
    • 固定pageSize
    • 调用service根据用户查询所有订单,返回值:PageBean
    • 将返回值对象绑定到request域中转发到order_list.jsp
  3. 在service中编写findAll方法,返回一个PageBean对象
    调用dao查询list和totalCount,将user.uid传递过去
  4. 在OrderDao中查询所有的订单
    查出所有订单:select * from orders where uid=? limit ?,?
    遍历所有的订单,根据订单id查询订单项表和商品表
    select * from orderitem oi,product p where oi.pid=p.pid and oi.oid=?
    用MapListHandler封装结果集,然后使用BeanUtil封装成指定的bean对象,添加到order的items中即可。

代码实现

① 修改页面上“我的订单”跳转地址

 <li><a href="${path}/user/order/page?currPage=1">我的订单</a></li>

② 完成OrderServlet

 /*** 分页查询订单* @param request* @param response* @throws Exception */private void page(HttpServletRequest request, HttpServletResponse response) throws Exception {//1、获取当前页Integer currPage=Integer.parseInt(request.getParameter("currPage"));Integer pageSize=3;     //2、获取用户User user=(User) request.getSession().getAttribute("user");if(user==null) {request.setAttribute("msg", "你还没有登录,请先登录!");request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);}//3、调用service 分页查询 参数:currPage  pageSize  user 返回值PageBeanPageBean<Order> page=orderService.page(currPage,pageSize,user);//4、将pageBean放入request中request.setAttribute("page", page);request.getRequestDispatcher("/jsp/order_list.jsp").forward(request, response);}

③ 完成OrderDaoImpl

 /*** 分页查询我的订单*/@Overridepublic List<Order> page(Integer currPage, Integer pageSize, String uid) throws Exception {String sql="select  * from orders where uid=? order by ordertime desc limit ?,?";List<Order> list=qr.query(sql, new BeanListHandler<>(Order.class),uid,(currPage-1)*pageSize,pageSize);//遍历订单集合,封装每个订单的订单项列表sql="select * from orderitem oi,product p where oi.pid=p.pid and oid=?";for(Order order:list) {//当前订单包含的所有内容List<Map<String , Object>> mList=qr.query(sql, new MapListHandler(),order.getOid());for(Map<String, Object> map: mList) {//封装productProduct p=new Product();BeanUtils.populate(p, map);//封装orderItemOrderItem oi=new OrderItem();BeanUtils.populate(oi, map);oi.setProduct(p);//封装到orderitemListorder.getItems().add(oi);}}return list;}/*** 查询我的订单的总数*/@Overridepublic int getTotalCount(String uid) throws Exception {String sql="select count(*) from orders where uid=?";return  ((Long)qr.query(sql, new ScalarHandler(),uid)).intValue();}

注意:由于MapListHandler不能对数据库查询别名进行封装,所以这里可以给Product添加三个set方法。

 public void setMarket_price(Double market_price) {this.marketPrice=market_price;}public void setShop_price(Double shop_price) {this.shopPrice=shop_price;}public void setIs_hot(Integer is_hot) {this.isHot=is_hot;}

④ 更改页面展示数据

 <table class="table table-bordered"><!-- 遍历我的订单  --><c:forEach items="${page.list }" var="order"><tbody><tr class="success"><th colspan="5">订单编号:${order.oid } 订单金额:${order.total }<c:if test="${order.state==0 }"><!-- 未付款 去付款 --><a href="#">付款</a></c:if><c:if test="${order.state==1 }">已付款</c:if><c:if test="${order.state==2 }"><a href="#">确认收货</a></c:if><c:if test="${order.state==3 }">已完成</c:if></th></tr><tr class="warning"><th>图片</th><th>商品</th><th>价格</th><th>数量</th><th>小计</th></tr><!-- 遍历订单项 --><c:forEach items="${order.items }" var="oi"><tr class="active"><td width="60" width="40%"><input type="hidden" name="id" value="22"><img src="${path }/${oi.product.pimage }" width="70" height="60"></td><td width="30%"><a target="_blank"> ${oi.product.pname }</a></td><td width="20%">¥${oi.product.shopPrice }</td><td width="10%">${oi.count }</td><td width="15%"><span class="subtotal">¥${oi.subtotal }</span></td></tr></c:forEach></tbody></c:forEach></table>

分页:
把之前的分页拿过来,更改一下跳转路径:

 <!--分页 --><div style="width:380px;margin:0 auto;margin-top:50px;"><ul class="pagination" style="text-align:center; margin-top:10px;"><!-- 判断当前页是否是首页(有无上一页) --><c:if test="${page.currPage==1 }"><!-- 不可用disabled --><li class="disabled"><a href="javascript:void(0)" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li></c:if><c:if test="${page.currPage!=1 }"><!-- 可用 --><li><a href="${path }/order/page?currPage=${page.currPage-1}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li></c:if><!-- 展示所有的页码 --><c:forEach begin="${page.currPage-4>0?page.currPage-4:1 }" end="${page.currPage+3>page.totalPage?page.totalPage:page.currPage+3 }" var="n"><!-- 判断是否是当前页 --><c:if test="${page.currPage==n }"><li class="active"><a href="javascript:void(0)">${n }</a></li></c:if><c:if test="${page.currPage!=n }"><li ><a href="${path }/order/page?currPage=${n}">${n }</a></li></c:if></c:forEach><!-- 判断是否是尾页(有无下一页) --><c:if test="${page.currPage==page.totalPage }"><!-- 不可用 --><li class="disabled"><a href="javascript:void(0)" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li></c:if><!-- 不是尾页 --><c:if test="${page.currPage!=page.totalPage }"><li><a href="${path }/order/page?currPage=${page.currPage+1}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li></c:if></ul></div>
测试即可

19_完成“我的订单”相关推荐

  1. 淘宝获取单笔订单信息服务端调用API及流程

    淘宝获取单笔交易接口(文档地址):https://open.taobao.com/api.htm?docId=54&docType=2 调用接口所需依赖(文档地址):https://devel ...

  2. 2021年大数据ELK(十七):Elasticsearch SQL 订单统计分析案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 订单统计分析案例 一.案例介绍 二.创建索引 三.导入测试数据 四.统计不同支 ...

  3. 2021年大数据Flink(四十一):​​​​​​​Flink实现订单自动好评

    目录 Flink实现订单自动好评 需求 数据 编码步骤 1.env 2.source 3.transformation 4.sink 5.execute 参考代码 参考效果 实现代码: Flink实现 ...

  4. php+rsa生成签名sign,PHP 做 RSA 签名 生成订单(支付宝例子)

    /组合签名 $a=time(); $b=substr($a, 1); //生成随机订单号 $orderid= $b.mt_rand(10000,99999); //合作身份者id,以2088开头的16 ...

  5. 微信小程序订单页面下拉刷新上拉分页加载

    微信小程序开发交流qq群   581478349    承接微信小程序开发.扫码加微信. 正文: 效果图: 代码: json代码: {"enablePullDownRefresh" ...

  6. 极速发展的饿了么订单系统架构演进

    http://www.infoq.com/cn/articles/eleme-order-system-architecture-evolution?utm_source=infoq&utm_ ...

  7. jQuery - 当当网我的订单页

    <!DOCTYPE html> <html> <head lang="en"><meta charset="UTF-8" ...

  8. php监听订单状态,ecshop数据库订单状态判断

    order_info 表 刚下完订单 order_status 0 shipping_status 0 pay_status 0 取消 order_status 2 shipping_status 0 ...

  9. group by 查找订单的最新状态 join

    Order:sn Procedures:sn,status 1. 有订单表和流程表. 订单表含有订单的详细信息[假设没有订单状态哈],每个订单有好多种状态:已付款.处理中.待收货等等.现在的需求可能是 ...

  10. Product Orders(生产订单)状态相关函数BAPI

    [相关表] JEST-对象的系统状态(I****)和用户状态(E****) JSTO-状态对象信息 TJ02T-系统状态文本 -用户状态文本 [锁对象]:生产订单锁对象  ESORDER 函数:  E ...

最新文章

  1. 虚拟化如何做实?详解戴尔2.0版解决方案
  2. matlab模型参数不匹配怎么办,修改Simulink模型后出现初始状态大小不匹配的错误...
  3. Debugging into .NET Core源代码的两种方式
  4. linux防火墙查看被动模式,Centos7搭建vsftpd及被动模式下的防火墙设置
  5. go 多行字符串_Go语言基本功,了解Go语言基础语法
  6. hadoop项目实战--ETL--(三)实现mysql表到HIVE表的全量导入与增量导入
  7. python 轻量级邮件发送库
  8. GridView“GridView1”激发了未处理的事件“PageIndexChanging”
  9. java私塾设计模式_Java私塾:研磨设计模式 之 访问者模式(Visitor)
  10. 工业中常见的有塑胶模、五金冲压模、压铸模、吹塑模、挤塑模
  11. 蓝牙怎么调声音大小_蓝牙耳机怎么调音量?
  12. TI am3352 gpio 驱动
  13. uniapp实现设备对接wifi功能
  14. CSS Gird布局用法
  15. 2020年五大学科竞赛国家队成员名单,保送清华仅7人!
  16. 第五章:用Python分析商品退单数据并找出异常商品
  17. MUSTer:Multi-Store Tracker:A Cognitive Psychology Inspired Approach to Object Tracking
  18. 通俗理解拉普拉斯算子(Laplace)
  19. NEFU 大一寒假训练十二(set)2020.02.18
  20. 已有Android工程集成DCloud页面

热门文章

  1. AC自动机算法概述及习题
  2. LaTeX 引用表格、照片、公式的时候自动添加 table,fig,equ
  3. js map遍历 修改对象里面的值_前端面试之你必须要懂的原生JS
  4. 南昌有什么软件测试专业的学校,南昌哪家软件测试培训班比较靠谱
  5. python -- 连接 orclae cx_Oracle的使用
  6. 如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
  7. 赋值运算不会提升数据类型,算术运算会提升类型
  8. 四十三 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理...
  9. NextPermutation,寻找下一个全排列
  10. 细说static关键字及其应用