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 ...
随机推荐
- linux初学体会
第一篇随笔,其实是为了写作业,可是老师的要求是对的,其实自己在配环境和做作业的时候也会把遇到的问题的解决方法记录下来,以便以后查找方便.这次借此将那些内容放在这里,也跟大家一起分享下. 上周六算是第二 ...
- 2>&1和&>的区别
简单记录下: COMMAND > /path/file 2>&1 COMMAND &> /path/file 这两个效果都是一样的,都是把正确的输入.错误输入存放到同 ...
- [ Continuously Update ] The Paper List of Image / Video Captioning
Papers Published in 2018 Convolutional Image Captioning - Jyoti Aneja et al., CVPR 2018 - [ Paper Re ...
- 【转】jQuery的deferred对象详解
jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本. 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. ...
- 使用DataTables导出html表格
去年与同事一起做一个小任务,需要把HTML表格中的数据导出到Excel.用原生js想要实现,只有IE浏览器提供导出到微软的Excel的接口,这就要求你电脑上必须安装IE浏览器.Excel,而且必须修改 ...
- 2019-1-7Xiaomi Mi5 刷全球版MIUI教程
2019-1-7Xiaomi Mi5 刷全球版MIUI教程 mi5 教程 小书匠 欢迎走进zozo的学习之旅. 前言 固件下载 刷机 刷recovery,root 试用体验 其他参考 前言 机器是老 ...
- JS判断备忘
快速引入jquery并显示重点内容 (function(d,j,s,t){t=d.body.appendChild(d.createElement("script"));t.onl ...
- gcc与g++区别以及相关参数详解
---恢复内容开始--- 原文链接:g++和gcc的区别 一 .二者区别 gcc和g++都是GNU(一个组织)的编译器. 1.对于.c后缀的文件,gcc把它当做是C程序:g++当做是C++程序: 2. ...
- 第二章 shell的语法
变量:字符串.数字.环境和参数 获取变量内容可以在变量前使用$字符,使用echo指令可以将变量内容输出到终端. wuchao@wuchao-Lenovo:~$ var=hello wuchao@wuc ...
- iOS-tableView刷新指定行,组
/一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:]; [tableview reloadSections:inde ...