(二十一)查询我的订单

案例1-查询我的订单(将所属的订单项也要查询出来)
需求:点击 页面上的 "我的订单",分页展示我所有的订单(将所属的订单项也要查询出来)
技术分析:多表的查询:内连接格式1:select * from a <inner> join b on 连接条件;格式2:select * from a,b where 连接条件;外连接(全部显示一张表的数据,另一张表的数据没有的为null)左外连接select * from a left <outer> join b on 连接条件;   子查询
步骤分析:1.修改head.jsp的连接 我的订单,通过分页展示/store/order?method=findAllByPage&currPage=?2.在orderservlet中编写findAllByPage方法获取用户(session),要判断有没有用户获取当前页固定pagesize调用orderservice根据用户查询所有订单 返回值:Pagebean将pagebean放入request域中,请求转发到/jsp/order_list.jsp3.在orderService中findAllByPage方法的操作:返回一个pagebean封装一个pagebeannew pagebean(currPage,pageSize,list,totalCount) //前台传来,固定,查询,查询调用dao查询list和totalcount    将user.uid传递过去4.在orderDao中查询所有的订单select * from orders where uid=? limit m,n 可以查询出所有的订单结果可以List<Order> list 使用beanListHandler遍历所有的订单,根据订单id查询订单项表和商品表select * from orderitem oi,product p where oi.pid = p.pid and oi.oid = ?用mapListhandler封装结果集,然后使用BeanUtils封装成指定的bean对象 ,添加到order的items中即可

/store/WebContent/jsp/head.jsp

<a href="${pageContext.request.contextPath }/order?method=findAllByPage&currPage=1">我的订单</a></li>

com.louis.web.servlet.OrderServlet

public String findAllByPage(HttpServletRequest request, HttpServletResponse response) throws Exception {//1、获取当前页int currPage = Integer.parseInt(request.getParameter("currPage"));int pageSize = 3;//2、获取用户User user = (User) request.getSession().getAttribute("user");if (user == null) {request.setAttribute("msg", "您还没有登陆,请登录");return "/jsp/msg.jsp";}//3、调用service分页查询 参数:currpage pageSize user 返回值:PageBeanOrderService orderService = (OrderService) BeanFactory.getBean("OrderService");PageBean<Order> bean = orderService.findAllByPage(currPage,pageSize,user);//4、将pageBean放入到request域中request.setAttribute("pb", bean);return "/jsp/order_list.jsp";}

com.louis.service.impl.OrderServiceImpl

/*** 分页查询订单*/@Overridepublic PageBean<Order> findAllByPage(int currPage, int pageSize, User user) throws Exception {OrderDao od=(OrderDao) BeanFactory.getBean("OrderDao");// 查询当前页数据List<Order> list=od.findAllByPage(currPage,pageSize,user.getUid());// 查询总条数int totalCount=od.getTotalCount(user.getUid());return new PageBean<>(list, currPage, pageSize, totalCount);}

com.louis.dao.impl.OrderDaoImpl

    /*** 查询我的订单 分页*/@Overridepublic List<Order> findAllByPage(int currPage, int pageSize, String uid) throws Exception {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());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 oi.oid = ?";for (Order order : list) {//当前订单包含的所有内容List<Map<String, Object>> mList = qr.query(sql, new MapListHandler(), order.getOid());//map的key:字段名  value:字段值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);//将orderItem对象添加到对应的order对象的list集合中
                order.getItems().add(oi);}}return list;}/*** 获取我的订单的总条数*/@Overridepublic int getTotalCount(String uid) throws Exception {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql="select count(*) from orders where uid = ?";return ((Long)qr.query(sql, new ScalarHandler(), uid)).intValue();}

/store/WebContent/jsp/order_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1"><title>会员登录</title><link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css" type="text/css" /><script src="${pageContext.request.contextPath}/js/jquery-1.11.3.min.js" type="text/javascript"></script><script src="${pageContext.request.contextPath}/js/bootstrap.min.js" type="text/javascript"></script><!-- 引入自定义css文件 style.css --><link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css" /><style>body {margin-top: 20px;margin: 0 auto;}.carousel-inner .item img {width: 100%;height: 300px;}</style></head><body><!-- 动态包含 --><jsp:include page="/jsp/head.jsp"></jsp:include><div class="container"><div class="row"><div style="margin:0 auto; margin-top:10px;width:950px;"><strong>我的订单</strong>  <table class="table table-bordered"><c:forEach items="${pb.list }" var="o"><tbody><tr class="success"><th colspan="5">订单编号:${o.oid } 订单金额:${o.total }<c:if test="${o.state==0 }"><a href="${pageContext.request.contextPath }/order?method=getById&oid=${o.oid}">付款</a></c:if><c:if test="${o.state==1 }">已付款</c:if><c:if test="${o.state==2 }"><a href="#">确认收货</a></c:if><c:if test="${o.state==3 }">已完成</c:if></th></tr><tr class="warning"><th>图片</th><th>商品</th><th>价格</th><th>数量</th><th>小计</th></tr><c:forEach items="${o.items }" var="oi"><tr class="active"><td width="60" width="40%"><input type="hidden" name="id" value="22"><img src="${pageContext.request.contextPath}/${oi.product.pimage}" width="70" height="60"></td><td width="30%"><a target="_blank">${oi.product.pname }</a></td><td width="20%">¥${oi.product.shop_price }</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></div><div style="text-align: center;"><ul class="pagination">        <c:if test="${1==pb.currPage }"><li class="disabled"><a href="javascript:void(0)" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li></c:if><c:if test="${1!=pb.currPage }"><li><a href="${pageContext.request.contextPath }/order?method=findAllByPage&currPage=${pb.currPage-1}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li></c:if><c:forEach begin="1" end="${pb.totalPage }" var="n"><c:if test="${n==pb.currPage }"><li class="active"><a href="javascript:void(0)">${n }</a></li></c:if><c:if test="${n!=pb.currPage }"><li><a href="${pageContext.request.contextPath }/order?method=findAllByPage&currPage=${n}">${n }</a></li></c:if></c:forEach><c:if test="${pb.currPage== pb.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="${pb.currPage!= pb.totalPage }"><li><a href="${pageContext.request.contextPath }/order?method=findAllByPage&currPage=${pb.currPage+1}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li></c:if></ul></div></div><div style="margin-top:50px;"><img src="${pageContext.request.contextPath}/image/footer.jpg" width="100%" height="78" alt="我们的优势" title="我们的优势" /></div><div style="text-align: center;margin-top: 5px;"><ul class="list-inline"><li><a>关于我们</a></li><li><a>联系我们</a></li><li><a>招贤纳士</a></li><li><a>法律声明</a></li><li><a>友情链接</a></li><li><a target="_blank">支付方式</a></li><li><a target="_blank">配送方式</a></li><li><a>服务声明</a></li><li><a>广告声明</a></li></ul></div><div style="text-align: center;margin-top: 5px;margin-bottom:20px;">Copyright &copy; 2005-2016 传智商城 版权所有</div></body></html>

问题

1、内连接、外连接

2、beanHandler

BeanListHandler

MapListHandler

scalarHandler

3、BeanUtils.populate

posted on 2017-10-15 01:12 Michael2397 阅读(...) 评论(...) 编辑 收藏

(二十一)查询我的订单相关推荐

  1. FreeSql (二十一)查询返回数据

    FreeSql 采用 ExpressionTree 优化读取速读,如果懂技术的你一定知道 .NETCore 技术下除了原生代码,最快就是 Emit 和 ExpressionTree. 项目在初期使用的 ...

  2. delphi Mercadopago阿根廷支付(支持获取账户信息和余额、创建商店,商店查询、创建二维码、二维码查询、创建订单、订单查询、订单退款)

    下载链接:https://download.csdn.net/download/liushenglin123/11435379 [delphi Mercadopago阿根廷支付]支持获取账户信息和余额 ...

  3. (二十二)查询订单的详情

    (二十二)查询订单的详情 案例2-查询订单的详情 需求:只有未付款的订单,点击"付款",跳转到订单的详情页面 步骤分析:1.在订单列表,点击付款,/store/order?meth ...

  4. SQL Server数据库开发的二十一条军规

    如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS). 在 ...

  5. FreeSql (二十七)将已写好的 SQL 语句,与实体类映射进行二次查询

    有时候,我们希望将写好的 sql 语句,甚至是存储过程进行查询,虽然效率不高(有时候并不是效率至上). 巧用AsTable var sql = fsql.Select<UserX>().A ...

  6. mysql数据库 二十一练习题 及答案 (mysql练习题)

    数据库二十一练习题 create table class ( classid int primary key, classname varchar(20) ) insert into class va ...

  7. 零基础带你学习MySQL—自连接(二十一)

    零基础带你学习MySQL-自连接(二十一) 自连接:自连接是指在同一张表的连接查询(将同一张表看做两张表) 自连接的特点如下: 把同一张表当做两张表使用 需要给表取别名 表名 表别名 列名不明确,可以 ...

  8. Docker系列(二十一)——Docker实例三Docker安装Tomcat实例

    < Docker实例三Docker安装Tomcat实例 > 前言 在前面一篇文章种,完成了 < Docker安装Nginx实例 >,本篇将继续镜像安装教程,并完成Docker安 ...

  9. 数据库系统原理与应用教程(077)—— MySQL 练习题:操作题 168-172(二十一):综合练习

    数据库系统原理与应用教程(077)-- MySQL 练习题:操作题 168-172(二十一):综合练习 168.分组统计(1) 该题目使用的表和数据如下: /* DROP TABLE IF EXIST ...

  10. 白话空间统计二十一:密度分析(一)

    白话空间统计二十一:密度分析(一) 密度分析这个概念其实很早就想写了,也有无数同学都问过我,虾神你能不能讲讲那些漂亮的热度图是怎么做的啊?比如下面这种: 如果说,这是互联网地图里面,最让人喜闻乐见的一 ...

最新文章

  1. 当你 ping 的时候,你知道背后发生了什么吗?
  2. Google单季度,营收超过753亿美元
  3. 50本精品前端开发书籍免费下载
  4. testng的报告自定义笔记
  5. 《Python Cookbook 3rd》笔记(4.6):带有外部状态的生成器函数
  6. StopWatch工具
  7. WPF中嵌套charts图表查询数据
  8. java异常错误的是,java 异常 错误处理
  9. Google 又逆天:语音输入离线实时输出文字,仅占 80 MB !然而……
  10. 软件工程导论作业2.4
  11. 哔哩哔哩HLB站缓存合并电脑版链接:https://wwa.lanzoui.com/b016vmouf版本:1.1公告:1、支持旧版(blv)合并2、新增提取音频功能3、修复合并失败的bug
  12. EXcel用法——如何冻结前两行,如何删除筛选的行
  13. 使用bibmap修改bib文件中参考文献的期刊或会议名的字母大小写格式为titlecase
  14. ltm是什么门的缩写_ltm的含义,ltm是什么的缩写,ltm的词语,ltm代表的意思
  15. 西瓜口袋拼团商城系统搭建相关问题
  16. vulnhub THE PLANETS: EARTH
  17. 大数据量、高并发量网站解决方案
  18. 你知道那些数字消失了吗?_?
  19. uniapp实现h5录音功能
  20. excel+导入oracle+工具,EXCEL导入ORACLE工具(Xls To Ora)下载 v1.9免费版-下载啦

热门文章

  1. 9大代理服务器软件的比较与分析之CCProxy、Squid
  2. LeetCode-Hot100-最长回文子串
  3. 郑捷《机器学习算法原理与编程实践》学习笔记(第三章 决策树的发展)(二)_C4.5...
  4. Quartz_2.2.X学习系列四: Tutorials - Lesson 4: More About Triggers
  5. TIA protal与SCL从入门到精通(6)——函数循环处理
  6. 会计凭证、成本中心、成本要素、总账、物料标准成本核算
  7. ctfshow(菜狗杯)
  8. windows10 安装php-cgi.exe为服务
  9. 5年后、10年后,你希望自己是个什么样的人?
  10. 场景图生成论文阅读笔记 之 LinkNet: Relational Embedding for Scene Graph