Jsp电子商务之七 订单篇2
从View页面,点击超链接查询订单,进入到控制器
OrderlistServlet
package com.cart.web;
import java.io.IOException; import java.util.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.cart.entity.*; import com.cart.service.OrderService; public class OrderlistServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //从View来获取查询订单; OrderService orderService=new OrderService(); Map<Order,ArrayList<Book>> map=(Map<Order,ArrayList<Book>>)orderService.getOrders(null, null); HttpSession session=req.getSession(); session.setAttribute("map",map); //将订单map存放到session中; //Iterator it=map.entrySet().iterator(); //System.out.println(map.entrySet().size());//长度为2是对的; //下面如何获取订单对象和对应的图书详情信息呢; //后台测试代码 // Order key; // ArrayList<Book> value; // while(it.hasNext()){ // Map.Entry<Order,ArrayList<Book>>entry=(Map.Entry<Order,ArrayList<Book>>)it.next(); // key=entry.getKey(); // value=entry.getValue(); // // System.out.println("订单"+key.getId()); // System.out.println("书名\t\t价格\t数量\t总价"); // for(Book book:value){ // System.out.println(book.getBookname()+"/"+book.getImage()+"/"+book.getPrice()+"/"+book.getCount()+"/"+key.getTotal()); // } // System.out.println(); // } resp.sendRedirect("orderlist.jsp"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
OrderService
package com.cart.service; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import com.cart.dao.*; import com.cart.dao.impl.*; import com.cart.entity.Book; import com.cart.entity.Order; import com.cart.entity.Userinfo; import com.cart.util.DaoFactory; import com.cart.util.PageControler; public class OrderService { //1.定义属性:对dao进行操作; OrderDao orderDao=new OrderDaoImpl(); CartDao cartDao=new CartDaoImpl(); //2.对订单,进行增删该查 public void delCartAndSaveOrder(String sbid,Userinfo user,Order order){ //使用事务操作,业务层可以这样操作,对不同的dao操作; Connection con=null; PreparedStatement pstmt=null; try{ StringBuilder sbSql=new StringBuilder(); sbSql.append("delete from cartitem where uid=? and bid in("); sbSql.append(sbid); sbSql.append(")"); String sql=sbSql.toString(); con=DaoFactory.getConnection(); pstmt=con.prepareStatement(sql); con.setAutoCommit(false);//设置自动提交事务,为false orderDao.insertOrder(order);//调用杀入订单方法;,同时删除原来的购物车数据方法; Object[] params={user.getId()}; DaoFactory.setParams(pstmt, params); DaoFactory.executeUpdate(sql, params); System.out.println(sbSql); con.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ DaoFactory.closeAll(null, pstmt, con); } } public int insertOrder(Order order){ //ct.deletecartItem(uid, bid); return orderDao.insertOrder(order); } public int updateOrder(int id){ return orderDao.updateOrder(id); } public int deleteOrder(int id){ return orderDao.deleteOrder(id); } public Order findOrderById(int id){ return orderDao.findOrderById(id); } public Map <Order,ArrayList<Book>> getOrders(String sql, PageControler pager) {//获取多条订单并带有详情 Connection con = null; Map <Order,ArrayList<Book>> rtn = new HashMap <Order,ArrayList<Book>>(); try { con = DaoFactory.getConnection(); OrderDao orderDao = new OrderDaoImpl(); rtn = orderDao.getOrders(sql, pager); } catch (SQLException e) { e.printStackTrace(); } finally { DaoFactory.closeAll(null, null, con); } return rtn; } }
OrderDao的实现类
package com.cart.dao.impl; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.cart.dao.OrderDao; import com.cart.entity.Book; import com.cart.entity.Order; import com.cart.util.DaoFactory; import com.cart.util.PageControler; public class OrderDaoImpl implements OrderDao{ PreparedStatement pstmt=null; Connection con=null; public int deleteOrder(int id) { return 0; } public Order findOrderById(int id) { return null; } public int insertOrder(Order order) { //将你所获得的订单数据,插入到数据库; int result=-1; try { String sql="insert orders(userid,createtime,total,address,phone,status)values(?,?,?,?,?,?)"; con=DaoFactory.getConnection(); pstmt=con.prepareStatement(sql); Object[] params={order.getUserid(),order.getCreatetime(),order.getTotal(),order.getShipaddress(),order.getContactphone(),order.getStatus()}; DaoFactory.setParams(pstmt, params); result=pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ DaoFactory.closeAll(null, pstmt, con); } return result; } public int updateOrder(int id) { return 0; } 、、//参数用于以后代码扩展 public Map<Order, ArrayList<Book>> getOrders(String sqlCon, PageControler pager) throws SQLException { List<Order> rtn = new ArrayList<Order>(); //可能会存在1个客户有多个订单,对吧; //String sql="select O.*,OD.* from orders O inner join orderdetails OD on O.id=OD.oid"; String sql="select O.id,o.createtime,o.total,od.count,od.transprice,b.bookname,b.price,b.image" + " from orders o inner join orderdetails od on od.oid=o.id inner join book b on b.id=od.bid"; //新的三表连接,取得book的值; con=DaoFactory.getConnection(); pstmt=con.prepareStatement(sql); ResultSet rs=pstmt.executeQuery();//执行结果放rs结果集; Map<Order,ArrayList<Book>> map=new HashMap<Order,ArrayList<Book>>(); Order order=new Order();//订单对象,用于接收客户的多个订单项; while(rs.next()){ int id=rs.getInt("id");//记录上次的一个id;6,如果和现在的id一致,则视为一个order //直接继续,添加书本; if(id!=order.getId()){ order.setId(rs.getInt("id")); order.setCreatetime(rs.getDate("createtime")); order.setTotal(rs.getDouble("total")); } //这个可以做好,不同订单,对应不同商品即1:1关系;不适合1:M关系; //到此为止,已经获得了,订单的关键要素点,下面需要获得相应的订单,对应的商品详情了; Book book=new Book(); book.setCount(rs.getInt("count")); book.setPrice(rs.getFloat("transprice")); book.setImage(rs.getString("image")); book.setBookname(rs.getString("bookname")); //设置图书表,然后添加到ArrayList里面; if(map.get(order)==null){ ArrayList list=new ArrayList(); list.add(book); map.put(order, list); }else{ //应该在order不为空的情况下判断,是否重复; ArrayList list=map.get(order); list.add(book); map.put(order, list); } } DaoFactory.closeAll(rs, pstmt, con); return map; } }
针对出现多个商品进入到一个订单的问题,已经给予解决了,其中的业务代码还可以继续修改,要继续等待哦。
OrderDaoImpl public Map<Order, ArrayList<ShoppingItem>> getOrders(String condition, PageControler pager) throws SQLException { shoppingService ss = new shoppingService(); List<Order> rtn = new ArrayList<Order>(); //可能会存在1个客户有多个订单 String sql="select o.id,o.submittime,o.totalprice,b.bid,b.point,b.stock,di.bcount,b.bookname,b.b_price from d_order o inner join d_items di on di.orderId=o.id inner join d_books b on b.bid=di.bid"; //新的三表连接,取得book的值; con=DaoFactory.getConnection(); pstmt=con.prepareStatement(sql); ResultSet rs=pstmt.executeQuery();//执行结果放rs结果集; Map<Order,ArrayList<ShoppingItem>> map=new HashMap<Order,ArrayList<ShoppingItem>>(); Order order=null;//订单对象,用于接收客户的多个订单项; while(rs.next()){ if(order==null){ order=new Order(); //1.第一次,正常; order.setId(rs.getInt("id")); order.setSubmittime(rs.getString("submittime")); order.setTotalprice(rs.getString("totalprice")); ShoppingItem si = ss.declareShoppingItem(rs); ArrayList list=new ArrayList(); list.add(si); map.put(order, list); }else{ if(order.getId()!=rs.getInt("id")){ order=new Order(); order.setId(rs.getInt("id")); order.setSubmittime(rs.getString("submittime")); order.setTotalprice(rs.getString("totalprice")); ShoppingItem si = ss.declareShoppingItem(rs); ArrayList list=new ArrayList(); list.add(si); map.put(order, list); }else{//证明是同一个订单; ShoppingItem si = ss.declareShoppingItem(rs); ArrayList list=map.get(order); list.add(si); map.put(order, list); } } } DaoFactory.closeAll(rs, pstmt, con); return map; }
Jsp电子商务之七 订单篇2的更多相关文章
- jsp电子商务系统之六 订单篇1
常规一个商品一个订单 多个商品一个订单 订单只有提交才能结算 付款页面 代码实现,主要是Servlet代码和Service业务层的代码,此处业务层,对多个dao的操作更为明显,体现业务二字!!! pa ...
- jsp电子商务购物车之五 数据库存储篇2
业务逻辑图,简单版要写各个Servlet //ChangeCartCountServlet 使用ajax实现数量,增加或减少; package com.cart.web; import java.io ...
- jsp电子商务购物车之四 数据库存储篇
为了方便用户下次登录,仍然可以看到自己的购物车内容,所以,需要在数据库存储相应的购物车项目,本处增加购物车项表;uid和bid是复合主键. package com.cart.entity; //购物车 ...
- jsp电子商务 购物车实现之三 购物车
CartServlet参考代码 : public void doPost(HttpServletRequest req, HttpServletResponse resp) throws Servle ...
- jsp电子商务 购物车实现之二 登录和分页篇
登录页面核心代码 <div id="login"> <h2>用户登陆</h2> <form method="post" ...
- jsp电子商务 购物车实现之一 设计篇
购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: ============= ...
- JSP/JAVA目录清单
JAVA253中国象棋(CS) JAVA258网络五子棋游戏的设计与实现(CS) JAVA390停车场管理系统SQL(CS) JSP001学生综合素质测评系统JAVA+Mysql JSP002学生成绩 ...
- JSP应用开发 -------- 电纸书(未完待续)
http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术 第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...
- jsp前端实现分页代码
前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...
随机推荐
- JMeter 录制APP脚本
具体步骤: 1.启动JMeter: 2.在“测试计划”中添加“线程组”: 3.“工作台”中添加“HTTP代理服务器”: 4.配置代理服务器:端口:8888(默认值),HTTPS Domains:192 ...
- 接口文档神器--apiui的使用
接口开发,最麻烦的就是写文档了,曾经我也因为写接口文档苦不堪言:自从使用了apiui接口文档神器,工作效率和文档清晰得到了不止一个档次的提升. 下面介绍一下这个神器的使用: 把文件下载下来,放在网站根 ...
- POJ - 3259
要判断是否有负的权值 #include<iostream> #include<stdio.h> #include<algorithm> #include<st ...
- github项目切换远程https到ssh通道
github 切换远程https到ssh通道 github 每个仓库有两类地址:https和ssh通道. https通道获取代码方便,提交过程中每次都需要输入用户名和密码. ssh通道需要提前配置号s ...
- 基于Kubernetes(k8s)的RabbitMQ 集群
目前,有很多种基于Kubernetes搭建RabbitMQ集群的解决方案.今天笔者今天将要讨论我们在Fuel CCP项目当中所采用的方式.这种方式加以转变也适用于搭建RabbitMQ集群的一般方法.所 ...
- 怎么用js精确判断li已经在ul存在过了?
<ul class="memory_messagelist" id="memory_messagelist"> <li><span ...
- 拷贝构造函数 & 拷贝赋值运算符
一.拷贝构造函数 1. 形式 class A { public: // ... A(const A &); // 拷贝构造函数 }; 2. 合成拷贝构造函数 编译器总会为我们合成一个拷贝构造函 ...
- Thunder团队Beta周贡献分规则
小组名称:Thunder 项目名称:i阅app 组长:王航 成员:李传康.翟宇豪.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 分配规则 规则1:基础分,拿出总分的20%(8分)进行均分,剩下的80%(32分) ...
- iOS- 优化与封装 APP音效的播放
1.关于音效 音效又称短音频,是一个声音文件,在应用程序中起到点缀效果,用于提升应用程序的整体用户体验. 我们手机里常见的APP几乎都少不了音效的点缀. 显示实现音效并不复杂,但对我们App很 ...
- 使用cookies模拟登陆
http://blog.csdn.net/a1099439833/article/details/51918955 使用cookies会话跟踪,保持cookies访问,对于cookies会失效的问题可 ...