从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的更多相关文章

  1. jsp电子商务系统之六 订单篇1

    常规一个商品一个订单 多个商品一个订单 订单只有提交才能结算 付款页面 代码实现,主要是Servlet代码和Service业务层的代码,此处业务层,对多个dao的操作更为明显,体现业务二字!!! pa ...

  2. jsp电子商务购物车之五 数据库存储篇2

    业务逻辑图,简单版要写各个Servlet //ChangeCartCountServlet 使用ajax实现数量,增加或减少; package com.cart.web; import java.io ...

  3. jsp电子商务购物车之四 数据库存储篇

    为了方便用户下次登录,仍然可以看到自己的购物车内容,所以,需要在数据库存储相应的购物车项目,本处增加购物车项表;uid和bid是复合主键. package com.cart.entity; //购物车 ...

  4. jsp电子商务 购物车实现之三 购物车

    CartServlet参考代码 : public void doPost(HttpServletRequest req, HttpServletResponse resp) throws Servle ...

  5. jsp电子商务 购物车实现之二 登录和分页篇

    登录页面核心代码 <div id="login"> <h2>用户登陆</h2> <form method="post" ...

  6. jsp电子商务 购物车实现之一 设计篇

    购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: ============= ...

  7. JSP/JAVA目录清单

    JAVA253中国象棋(CS) JAVA258网络五子棋游戏的设计与实现(CS) JAVA390停车场管理系统SQL(CS) JSP001学生综合素质测评系统JAVA+Mysql JSP002学生成绩 ...

  8. JSP应用开发 -------- 电纸书(未完待续)

    http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术   第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...

  9. jsp前端实现分页代码

    前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...

随机推荐

  1. Visual Studio 起始页中不显示最近使用的项目的解决办法

    将 HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/NoRecentDocsHistory的 ...

  2. 【廖雪峰老师python教程】——进程与线程

    多进程 操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去.表面上看,每个任务都是交替执行的,但是,由于CPU ...

  3. Linux命令应用大词典-第9章 数字计算

    9.1 bc:任意精度的计算器 9.2 dc:一个任意精度的计算器 9.3 expr:将表达式的值打印到标准输出 9.1 bc:任意精度的计算器 9.2 dc:一个任意精度的计算器 9.3 expr: ...

  4. 365. Count 1 in Binary【LintCode java】

    Description Count how many 1 in binary representation of a 32-bit integer. Example Given 32, return  ...

  5. [原创]Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程

    网上乱七八糟的资料实在是太多了, 乱, 特别乱, 而看书呢, 我读了2本书, 一本叫做<>, 另一本叫做<< Docker进阶与实战>> 在 服务发现这块讲的又不清 ...

  6. 最小生成树——prim

    prim:逐“点”生成最小生成树 与Dijkstra不同的是:加入点到生成树中,不要考虑与源点的距离,而是考虑与生成树的距离 #include <iostream> #include &l ...

  7. spring 国际化i18n配置

    i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改 ...

  8. 第三次寒假作业 sketch 了解

    什么是sketch? sketch 是一种基于散列的数据结构,可以在高速网络环境中,实时地存储流量特征信息,只占用较小的空间资源,并且具备在理论上可证明的估计精度与内存的平衡特性. 通过设置散列函数, ...

  9. Java 二维数组

    在 Java 中,二维数组与一维数组一样,但是不同于 C 中的二维数组: 1. 在 Java 中,二维数组可以看成是以数组为元素的数组,例如:  int a[][] = {{1,2},{3,4,5,6 ...

  10. c# 中base64字符串和图片的相互转换

    c#base64字符串转图片用到了bitmap类,封装 GDI+ 位图,此位图由图形图像及其特性的像素数据组成. Bitmap 是用于处理由像素数据定义的图像的对象. 具体bitmap类是什么可以自己 ...