JavaWeb.20.MVC.Servlet版购物车02

回顾购物车01部分

一、数据库建表语句,插入数据

create table car_user
(
    id       number primary key,
    account  varchar2(30) not null,
    password varchar(32)  not null
);

comment on column car_user.ID is '用户编号';
comment on column car_user.account is '用户账户';
comment on column car_user.password is '用户密码(MD5)';

create table car_goods
(
    id       number primary key,
    name     varchar2(20)                        not null,
    describe varchar2(100) default '此商品暂时没有介绍🤣' not null,
    price    number                              not null
);

comment on column car_goods.ID is '商品编号';
comment on column car_goods.name is '商品名称';
comment on column car_goods.describe is '商品描述';
comment on column car_goods.price is '用户价格';

create table car_order
(
    id      number primary key,
    user_id number not null,
    total   number not null
);

comment on column car_order.ID is '订单编号';
comment on column car_order.user_id is '谁的订单!';
comment on column car_order.total is '订单总价';

create table car_order_item
(
    id       number primary key,
    order_id number not null,
    goods_id number not null,
    quantity number not null,
    total    number not null
);

comment on column car_order_item.ID is '订单项编号';
comment on column car_order_item.order_id is '哪个订单!';
comment on column car_order_item.goods_id is '哪个商品!';
comment on column car_order_item.quantity is '下单数量';
comment on column car_order_item.total is '订单项总价';

comment on table car_user is '购物车用户表';
comment on table car_goods is '购物车商品表';
comment on table car_order is '购物车订单表';
comment on table car_order_item is '购物车订单项表';

create unique index car_user_account_idx on car_user (account);

insert into car_user
values (1, '2890@fox.com', 'ff9830c42660c1dd1942844f8069b74a');-- root123

insert into car_user
values (2, '2357@fox.com', 'e10adc3949ba59abbe56e057f20f883e');-- 123456

insert into car_goods
select 1, '丝袜奶茶', '冰冰娘娘,很好喝', 99
from dual
union
select 2, '勃勃奶茶', '啊~,好冰冰', 29
from dual
union
select 3, '蜜雪大补丁', '可以加个桃桃🍑', 59
from dual
union
select 4, '臭🐟咖啡', '人气最高', 88
from dual
union
select 5, '雪王咖啡', 'incredible taste', 999
from dual
union
select 6, '拉稀弹筒', '👌,就亿点点', 1
from dual;

insert into car_order_item
values (1, 1, 1, 2, 99 * 2);
insert into car_order_item
values (2, 1, 2, 3, 29 * 3);
insert into car_order_item
values (3, 1, 6, 100, 100);

insert into car_order
values (1, 1, 99 * 2 + 29 * 3 + 100);

insert into car_order_item
values (4, 2, 3, 2, 59 * 2);
insert into car_order_item
values (5, 2, 4, 3, 88 * 3);
insert into car_order_item
values (6, 2, 5, 100, 999 * 100);

insert into car_order
values (2, 2, 59 * 2 + 88 * 3 + 999 * 100);

以下是接着上一章的基础上增加的功能

二、查看订单

查看订单页面的展示图如下:

在这里插入图片描述
查看订单界面的代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${list == null}">
    <c:redirect url="order.do"/>
</c:if>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css">
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>我的订单</title>
</head>
<body>
 
<div class="container">
 
    <h1>
        您好, <small>这是订单界面</small>
    </h1>
    <h1>
        <a href="index.jsp" class="btn btn-default">继续购买</a>
        <a href="car.jsp" class="btn btn-default">返回购物车</a>
    </h1>
    <table class="table table-bordered table-striped">
        <tbody>
        <tr>
            <th>订单编号</th>
            <th>订单总价</th>
            <th>订单操作</th>
        </tr>
        <c:forEach items="${list}" var="order">
        <tr>
            <td>${order.id}</td>
            <td>${order.total}</td>
            <td>
                <a href="item.do?id=${order.id}" class="btn btn-default">查看详情</a>
            </td>
        </tr>
        </c:forEach>
        </tbody>
    </table>
 
</div>
 
</body>
</html>

三、订单结算

订单结算页面的展示图:
在这里插入图片描述
在购物车界面,点击订单结算功能的按钮,可以清空购物车,如下图所示:
在这里插入图片描述

四、完整的项目代码

1、util包代码

DBHelper.java:

package com.zking.util;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
import oracle.jdbc.driver.OracleDriver;
 
public class DBHelper {
	//OracleDriver
	//加载驱动
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
			
		}
	}
	
	//定义连接字符串
	private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
	
	//获得连接
	public static Connection getCon() {
		try {
			return DriverManager.getConnection(URL,"scott","123");
		} catch (Exception e) {
			e.printStackTrace();
			
		}return null;
	}
	
	//关闭资源
	public static void close(Connection con,PreparedStatement ps,ResultSet rs) {
		try {
			if(con!=null&&!con.isClosed()) {
				con.close();
			}if(ps!=null) {
				ps.close();
			}if(rs!=null) {
				rs.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
			
		}
	}
	public static void main(String[] args) {
		System.out.println(DBHelper.getCon());
	}
	
}

2、pojo包代码

Goods.java:

package com.zking.pojo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 * @Description 商品实体类
 **/
@SuppressWarnings("all")
@Accessors(chain = true)
public class Goods {
 
    private Integer id;
    private String name;
    private String describe;
    private Integer price;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescribe() {
		return describe;
	}
	public void setDescribe(String describe) {
		this.describe = describe;
	}
	public Integer getPrice() {
		return price;
	}
	public void setPrice(Integer price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Goods [id=" + id + ", name=" + name + ", describe=" + describe + ", price=" + price + "]";
	}
	public Goods(Integer id, String name, String describe, Integer price) {
		super();
		this.id = id;
		this.name = name;
		this.describe = describe;
		this.price = price;
	}
    
    public Goods() {
		// TODO Auto-generated constructor stub
	}
 
}

Order.java:

package com.zking.pojo;
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 * @Description 订单项实体类
 **/
public class Order {
	
	private Integer id;
	private Integer userId;
	private Integer total;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public Integer getTotal() {
		return total;
	}
	public void setTotal(Integer total) {
		this.total = total;
	}
	@Override
	public String toString() {
		return "Order [id=" + id + ", userId=" + userId + ", total=" + total + "]";
	}
	public Order(Integer id, Integer userId, Integer total) {
		super();
		this.id = id;
		this.userId = userId;
		this.total = total;
	}
	
	public Order() {
		// TODO Auto-generated constructor stub
	}
 
}

OrderItem.java:

package com.zking.pojo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 * @Description 订单项实体类
 **/
@SuppressWarnings("all")
 
public class OrderItem {
 
    private Integer id;
    private Integer orderId;
    private Goods goods;
    private Integer quantity;
    private Integer total;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Integer getOrderId() {
		return orderId;
	}
	public void setOrderId(Integer orderId) {
		this.orderId = orderId;
	}
	public Goods getGoods() {
		return goods;
	}
	public void setGoods(Goods goods) {
		this.goods = goods;
	}
	public Integer getQuantity() {
		return quantity;
	}
	public void setQuantity(Integer quantity) {
		this.quantity = quantity;
	}
	public Integer getTotal() {
		return total;
	}
	public void setTotal(Integer total) {
		this.total = total;
	}
	@Override
	public String toString() {
		return "OrderItem [id=" + id + ", orderId=" + orderId + ", goods=" + goods + ", quantity=" + quantity
				+ ", total=" + total + "]";
	}
	public OrderItem(Integer id, Integer orderId, Goods goods, Integer quantity, Integer total) {
		super();
		this.id = id;
		this.orderId = orderId;
		this.goods = goods;
		this.quantity = quantity;
		this.total = total;
	}
    
    
    public OrderItem() {
		// TODO Auto-generated constructor stub
	}
 
}

User.java:

package com.zking.pojo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 * @Description 用户实体类
 **/
@SuppressWarnings("all")
 
@Accessors(chain = true)
public class User {
 
    private Integer id;
    private String account;
    private String password;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", account=" + account + ", password=" + password + "]";
	}
	public User(Integer id, String account, String password) {
		super();
		this.id = id;
		this.account = account;
		this.password = password;
	}
 
    
    public User() {
		// TODO Auto-generated constructor stub
	}
}

3、filter 过滤包

LoginFilter.java:

package com.zking.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 **/
@SuppressWarnings("all")
@WebFilter("/*") //所有的请求都会被拦截
public class LoginFilter implements Filter {//过滤器一般最先执行
 
    //如果登录了 正常通行
    //如果没登陆 让你回到登录页面
 
    //【req.getServletPath()】
    //  localhost:8080/login.jsp -> /login.jsp
    //  localhost:8080/index.jsp -> /index.jsp
    //  localhost:8080/manager.jsp -> /manager.jsp
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //有一些页面需要放行 【login.jsp】
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        //拿的是当前项目之后的路径
        String path = req.getServletPath();
        if (path.equals("/login.jsp")||path.equals("/login.do")) {
            chain.doFilter(request, response);//放行
            return;
        }
        //判断你是否可以通行【有没有登录:session中是否有user属性】
        Object user = req.getSession().getAttribute("user");
        if (user == null) {
            resp.sendRedirect("login.jsp");
            return;
        } else {
            chain.doFilter(request, response);//放行
        }
    }
 
}

4、表示层:

servlet包:
AddServlet.java:

package com.zking.servlet;
 
import com.zking.biz.IGoodsBiz;
import com.zking.biz.impl.GoodsBizImpl;
import com.zking.pojo.Goods;
import com.zking.pojo.OrderItem;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 **/
@SuppressWarnings("all")
@WebServlet("/add.do")
public class AddServlet extends HttpServlet {
 
    private IGoodsBiz GoodsBiz = new GoodsBizImpl();
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //购物车在哪里?
        List<OrderItem> car = (List<OrderItem>) req.getSession().getAttribute("car");
        //是哪件商品?需要用户带一个商品的id
        int id = Integer.parseInt(req.getParameter("id"));
        //购物车中已经有了,数量+1
        boolean f = true;
        for (OrderItem item : car) {
            // item就是订单项,订单项中有一个与他对应的商品
            if (item.getGoods().getId().equals(id)) {
                //数量+1
                item.setQuantity(item.getQuantity() + 1);
                //价格需要重新计算
                item.setTotal(item.getQuantity() * item.getGoods().getPrice());
                f = false;
                break;
            }
        }
        //购物车中没有,添加购物车
        if (f) {
            //生成了订单项
            OrderItem item = new OrderItem();
            //根据商品的id去数据库查出这件商品
            Goods one = GoodsBiz.one(id);
            item.setGoods(one);
            item.setQuantity(1);
            item.setTotal(one.getPrice());
            //添加订单项到购物车
            car.add(item);
        }
        req.getSession().setAttribute("total", car.stream()
                .mapToInt(OrderItem::getTotal)
                .sum());
        //返回首页
        resp.sendRedirect("index.do");
    }
 
}

CalcServlet.java:

package com.zking.servlet;
 
import com.zking.biz.IOrderBiz;
import com.zking.biz.IOrderItemBiz;
import com.zking.biz.impl.OrderBizImpl;
import com.zking.biz.impl.OrderItemBizImpl;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
import com.zking.pojo.User;
import org.apache.commons.codec.binary.StringUtils;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 * @Description 结算的servlet
 **/
@SuppressWarnings("all")
@WebServlet("/calc.do")
public class CalcServlet extends HttpServlet {
 
    private IOrderBiz orderBiz=new OrderBizImpl();
    private IOrderItemBiz orderItemBiz=new OrderItemBizImpl();
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //购物车在哪里?
        List<OrderItem> car = (List<OrderItem>)req.getSession().getAttribute("car");
        //获得用户
        User user = (User)req.getSession().getAttribute("user");
        //什么是结算? 将数据放到【订单】【订单项】
        if(car.isEmpty()){
            //返回购物车
            resp.sendRedirect("car.jsp");
            return;
        }
        //计算总和
        int sum=0;
        for (OrderItem item : car) {
            sum+=item.getTotal();
        }
        //优先结算订单
        Order order=new Order();
        order.setId(orderBiz.maxPK());
        order.setUserId(user.getId());
        order.setTotal(sum);
        //将订单放到数据库
        int i = orderBiz.insert(order);
        if(i>0){
            //如果订单插入成功了,则插入订单项
            for (OrderItem item : car) {
                //item没有id
                item.setId(orderItemBiz.maxPk());
                //也没有订单编号
                item.setOrderId(order.getId());
                orderItemBiz.insert(item);
            }
            //结算完毕
            car.clear();
            //清空价格
            req.getSession().setAttribute("total",0);
        }
 
        //返回购物车
        resp.sendRedirect("car.jsp");
    }
 
}

ClearServlet.java:

package com.zking.servlet;
 
import com.zking.pojo.OrderItem;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 * @Description {自定义描述}
 **/
@SuppressWarnings("all")
@WebServlet("/clear.do")
public class ClearServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //购物车在哪里?
        List<OrderItem> car = (List<OrderItem>)req.getSession().getAttribute("car");
        //清空购物车
        car.clear();
        //返回首页
        resp.sendRedirect("car.jsp");
    }
 
}

DelServlet.java:

package com.zking.servlet;
 
import com.zking.pojo.Goods;
import com.zking.pojo.OrderItem;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 * @Description {自定义描述}
 **/
@SuppressWarnings("all")
@WebServlet("/del.do")
public class DelServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //购物车在哪里?
        List<OrderItem> car = (List<OrderItem>)req.getSession().getAttribute("car");
        //是哪件商品?需要用户带一个商品的id
        int id = Integer.parseInt(req.getParameter("id"));
        //购物车中已经有了,删除
        OrderItem i=null;
        for (OrderItem item : car) {
            // item就是订单项,订单项中有一个与他对应的商品
            if(item.getGoods().getId().equals(id)){
                //你就是我要删除的
                i=item;
                break;
            }
        }
        car.remove(i);
        req.getSession().setAttribute("total",car.stream()
                .mapToInt(OrderItem::getTotal)
                .sum());
        //返回首页
        resp.sendRedirect("car.jsp");
    }
 
}

IndexServlet.java:

package com.zking.servlet;
 
import com.zking.biz.IGoodsBiz;
import com.zking.biz.impl.GoodsBizImpl;
import com.zking.pojo.Goods;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 **/
@SuppressWarnings("all")
@WebServlet("/index.do")
public class IndexServlet extends HttpServlet {
 
    private IGoodsBiz goodsBiz=new GoodsBizImpl();
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //取到biz层中的商品数据的集合
        List<Goods> list = goodsBiz.list();
        //把数据放到index.jsp中去显示
        //request【转发】 session appliction
        req.setAttribute("list",list);
        //只有转发才能携带请求的数据
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
 
}

ItemServlet.java:

package com.zking.servlet;
 
import com.zking.biz.IOrderBiz;
import com.zking.biz.IOrderItemBiz;
import com.zking.biz.impl.OrderBizImpl;
import com.zking.biz.impl.OrderItemBizImpl;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
import com.zking.pojo.User;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 * @Description
 **/
@SuppressWarnings("all")
@WebServlet("/item.do")
public class ItemServlet extends HttpServlet {
 
    private IOrderItemBiz orderItemBiz=new OrderItemBizImpl();
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接受订单的id
        Integer id = Integer.parseInt(req.getParameter("id"));
        //根据订单id查询对应的订单项
        List<OrderItem> list = orderItemBiz.list(id);
        //放到请求作用域中
        req.setAttribute("list",list);
        //返回order.jsp
        req.getRequestDispatcher("item.jsp").forward(req,resp);
    }
 
}

LoginServlet.java:

package com.zking.servlet;
 
import com.zking.biz.IUserBiz;
import com.zking.biz.impl.UserBizImpl;
import com.zking.pojo.Goods;
import com.zking.pojo.OrderItem;
import com.zking.pojo.User;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 * @Description 实现登录功能
 **/
@SuppressWarnings("all")
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
 
    private IUserBiz userBiz=new UserBizImpl();
 
    //接收用户的数据: 【post】【get】
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        //参数的获取
        String account = req.getParameter("account");
        String password = req.getParameter("password");
        User user = new User();
        user.setAccount(account);
        user.setPassword(password);
        //去biz完成登录验证
        // 表示层(servlet)->业务逻辑层(biz)->数据库访问层(dao)
        User u = userBiz.login(user);
        if(u==null){
            resp.sendRedirect("login.jsp");
        }else{
            //将数据放到session中
            req.getSession().setAttribute("user",u);
            //为这个用户生成一个购物车
            List<OrderItem> car=new ArrayList<>();
            req.getSession().setAttribute("car",car);
            //把总价直接放到session中
            req.getSession().setAttribute("total",0);
            //去到首页
            resp.sendRedirect("index.do");
        }
    }
 
}

OrderServlet.java:

package com.zking.servlet;
 
import com.zking.biz.IOrderBiz;
import com.zking.biz.IOrderItemBiz;
import com.zking.biz.impl.OrderBizImpl;
import com.zking.biz.impl.OrderItemBizImpl;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
import com.zking.pojo.User;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 * @Description
 **/
@SuppressWarnings("all")
@WebServlet("/order.do")
public class OrderServlet extends HttpServlet {
 
    private IOrderBiz orderBiz=new OrderBizImpl();
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得用户
        User user = (User)req.getSession().getAttribute("user");
        List<Order> list = orderBiz.list(user.getId());
        //放到请求作用域中
        req.setAttribute("list",list);
        //返回order.jsp
        req.getRequestDispatcher("order.jsp").forward(req,resp);
    }
 
}

UpdServlet.java:

package com.zking.servlet;
 
import com.zking.pojo.Goods;
import com.zking.pojo.OrderItem;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-25@星期一
 * @Description {自定义描述}
 **/
@SuppressWarnings("all")
@WebServlet("/upd.do")
public class UpdServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //购物车在哪里?
        List<OrderItem> car = (List<OrderItem>)req.getSession().getAttribute("car");
        //是哪件商品?需要用户带一个商品的id
        int id = Integer.parseInt(req.getParameter("id"));
        //获取需要改变的类型(1,-1)
        int type = Integer.parseInt(req.getParameter("type"));
        //购物车中已经有了,数量+1
        for (OrderItem item : car) {
            // item就是订单项,订单项中有一个与他对应的商品
            if(item.getGoods().getId().equals(id)){
                //数量+还是-
                int count = item.getQuantity() + type;
                if(count<1)count=1;//最少一个
             //   if(count>5)count=5;//最多5个
                item.setQuantity(count);
                //价格需要重新计算
              item.setTotal(item.getQuantity()*item.getGoods().getPrice());
                req.getSession().setAttribute("total",car.stream()
                        .mapToInt(OrderItem::getTotal)
                        .sum());
                break;
            }
        }
        //返回首页
        resp.sendRedirect("car.jsp");
    }
 
}

5、业务逻辑层

biz包的代码

IGoodsBiz.java:

package com.zking.biz;
 
import com.zking.pojo.Goods;
 
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public interface IGoodsBiz {
 
    List<Goods> list();
 
    Goods one(int id);
 
}

IOrderBiz.java:

package com.zking.biz;
 
import java.util.List;
 
import com.zking.pojo.Order;
 
public interface IOrderBiz {
	
	int maxPK();
	
	int insert(Order order);
	
	List<Order> list(int userId);
 
}

IOrderItemImpl.java:

package com.zking.biz;
 
import java.util.List;
 
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
 
public interface IOrderItemBiz {
	
	int maxPk();
	
	int insert(OrderItem item);
	
	List<OrderItem> list(Integer id);
 
}

IUserBiz.java:

package com.zking.biz;
 
import com.zking.pojo.User;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public interface IUserBiz {
 
    User login(User user);
 
}

GoodsBizImpl.java:

package com.zking.biz.impl;
 
import com.zking.biz.IGoodsBiz;
import com.zking.dao.IGoodsDao;
import com.zking.dao.impl.GoodsDaoImpl;
import com.zking.pojo.Goods;
 
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public class GoodsBizImpl implements IGoodsBiz {
 
    private IGoodsDao goodsDao=new GoodsDaoImpl();
 
    @Override
    public List<Goods> list() {
        return goodsDao.list();
    }
 
    @Override
    public Goods one(int id) {
        return goodsDao.one(id);
    }
}

OrderBizImpl.java:

package com.zking.biz.impl;
 
import java.util.List;
 
import com.zking.biz.IOrderBiz;
import com.zking.dao.IOrderDao;
import com.zking.dao.impl.OrderDaoImpl;
import com.zking.pojo.Order;
 
public class OrderBizImpl implements IOrderBiz{
	
	private IOrderDao orderDao=new OrderDaoImpl();
 
	@Override
	public int maxPK() {
		return orderDao.maxPk();
	}
 
	@Override
	public int insert(Order order) {
		return orderDao.inser(order);
	}
 
	@Override
	public List<Order> list(int userId) {
		return orderDao.list(userId);
	}
 
}

OrderItemBizImpl.java:

package com.zking.biz.impl;
 
import java.util.List;
 
import com.zking.biz.IOrderBiz;
import com.zking.biz.IOrderItemBiz;
import com.zking.dao.IOrderItemDao;
import com.zking.dao.impl.OrderItemDaoImpl;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
 
public class OrderItemBizImpl implements IOrderItemBiz{
 
	private IOrderItemDao orderItemDao=new OrderItemDaoImpl();
 
	@Override
	public int maxPk() {
		return orderItemDao.maxPk();
	}
 
	@Override
	public int insert(OrderItem item) {
		return orderItemDao.insert(item);
	}
 
	@Override
	public List<OrderItem> list(Integer id) {
		return orderItemDao.list(id);
	}
	
	
	
}

UserBizImpl.java:

package com.zking.biz.impl;
 
import com.zking.biz.IUserBiz;
import com.zking.dao.IUserDao;
import com.zking.dao.impl.UserDaoImpl;
import com.zking.pojo.User;
import org.apache.commons.codec.digest.DigestUtils;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public class UserBizImpl implements IUserBiz {
 
    private IUserDao userDao=new UserDaoImpl();
 
    @Override
    public User login(User user) {
        //user 是用户给进来的
        //u 是数据库中存在的
        User u = userDao.login(user);
        if(u==null){
            return null;//account账号在数据库中查询不到记录
        }
        //需要将前端给我的那个用户的密码加密之后再和数据库的密码进行比较
        String pwd= DigestUtils.md5Hex(user.getPassword());
        if(!u.getPassword().equals(pwd)){
            return null;//账号存在,但是密码不一致
        }
        return u;
    }
 
}

6、数据库访问层:

dao包代码

IGoodsDao.java:

package com.zking.dao;
 
import com.zking.pojo.Goods;
 
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public interface IGoodsDao {
 
    List<Goods> list();
 
    Goods one(int id);
 
}

IOrderDao.java:

package com.zking.dao;
 
import java.util.List;
 
import com.zking.pojo.Order;
 
public interface IOrderDao {
	
	int maxPk();
	
	int inser(Order order);
	
	List<Order> list(int userId);
 
}

IOrderItemDao.java:

package com.zking.dao;
 
import java.util.List;
 
import com.zking.pojo.OrderItem;
 
public interface IOrderItemDao {
	
	int maxPk();
	
	int insert(OrderItem item);
	
	List<OrderItem> list(Integer id);
 
}

IUserDao.java:

package com.zking.dao;
 
import com.zking.pojo.User;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public interface IUserDao {
 
    User login(User user);
 
}

GoodsDaoImpl.java:

package com.zking.dao.impl;
 
import com.zking.dao.IGoodsDao;
import com.zking.pojo.Goods;
import com.zking.util.DBHelper;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public class GoodsDaoImpl implements IGoodsDao {
 
    //定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;
 
    @Override
    public List<Goods> list() {
        List<Goods> list = new ArrayList<Goods>();
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select * from car_goods");
            rs = ps.executeQuery();
            while (rs.next()) {
                Goods goods = new Goods();
                goods.setId(rs.getInt(1));
                goods.setName(rs.getString(2));
                goods.setDescribe(rs.getString(3));
                goods.setPrice(rs.getInt(4));
                list.add(goods);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return list;
    }
 
    @Override
    public Goods one(int id) {
        List<Goods> list = new ArrayList<Goods>();
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select * from car_goods where id=?");
            ps.setInt(1,id);
            rs = ps.executeQuery();
            if (rs.next()) {
                Goods goods = new Goods();
                goods.setId(rs.getInt(1));
                goods.setName(rs.getString(2));
                goods.setDescribe(rs.getString(3));
                goods.setPrice(rs.getInt(4));
                return goods;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return null;
    }
 
}

OrderDaoImpl.java:

package com.zking.dao.impl;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
 
import com.zking.dao.IOrderDao;
import com.zking.pojo.Order;
import com.zking.util.DBHelper;
 
public class OrderDaoImpl implements IOrderDao{
 
	//定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;
	@Override
	public int maxPk() {
		try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select nvl(max(id),0)+1 from car_order");
            rs = ps.executeQuery();
            if (rs.next()) {
               return rs.getInt(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return 0;
    }
 
	@Override
	public int inser(Order order) {
		try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("insert into car_order values(?,?,?)");
            ps.setInt(1,order.getId());
            ps.setInt(2,order.getUserId());
            ps.setInt(3,order.getTotal());
            return ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return 0;
    }
	@Override
	public List<Order> list(int userId) {
		  List<Order> list = new ArrayList<>();
	        try {
	            con = DBHelper.getCon();
	            ps = con.prepareStatement("select * from car_order where user_id=?");
	            ps.setInt(1,userId);
	            rs=ps.executeQuery();
	            while(rs.next()){
	                Order order=new Order();
	                order.setId(rs.getInt(1));
	                order.setUserId(rs.getInt(2));
	                order.setTotal(rs.getInt(3));
	                list.add(order);
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            DBHelper.close(con, ps, rs);
	        }
	        return list;
	    }
	}

OrderItemDaoImpl.java:

package com.zking.dao.impl;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
 
import com.zking.dao.IGoodsDao;
import com.zking.dao.IOrderItemDao;
import com.zking.pojo.OrderItem;
import com.zking.util.DBHelper;
 
public class OrderItemDaoImpl implements IOrderItemDao{
 
 
    private IGoodsDao goodsDao=new GoodsDaoImpl();
 
    //定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;
 
	@Override
	public int maxPk() {
		 try {
	            con = DBHelper.getCon();
	            ps = con.prepareStatement("select nvl(max(id),0)+1 from car_order_item");
	            rs = ps.executeQuery();
	            if (rs.next()) {
	                return rs.getInt(1);
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            DBHelper.close(con, ps, rs);
	        }
	        return 0;
	    }
 
	@Override
	public int insert(OrderItem item) {
		 try {
	            con = DBHelper.getCon();
	            ps = con.prepareStatement("insert into car_order_item values(?,?,?,?,?)");
	            ps.setInt(1, item.getId());
	            ps.setInt(2, item.getOrderId());
	            ps.setInt(3, item.getGoods().getId());
	            ps.setInt(4, item.getQuantity());
	            ps.setInt(5, item.getTotal());
	            return ps.executeUpdate();
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            DBHelper.close(con, ps, rs);
	        }
	        return 0;
	    }
 
	@Override
	public List<OrderItem> list(Integer orderId) {
		 List<OrderItem> list = new ArrayList<>();
	        try {
	            con = DBHelper.getCon();
	            ps = con.prepareStatement("select * from car_order_item where order_id=?");
	            ps.setInt(1,orderId);
	            rs=ps.executeQuery();
	            while(rs.next()){
	                OrderItem item=new OrderItem();
	                item.setId(rs.getInt(1));
	                item.setOrderId(rs.getInt(2));
	                item.setGoods(goodsDao.one(rs.getInt(3)));
	                item.setQuantity(rs.getInt(4));
	                item.setTotal(rs.getInt(5));
	                list.add(item);
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            DBHelper.close(con, ps, rs);
	        }
	        return list;
	    }
 
	}
 

UserDaoImpl.java:

package com.zking.dao.impl;
 
import com.zking.dao.IUserDao;
import com.zking.pojo.User;
import com.zking.util.DBHelper;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
/**
 * @author yy
 * @version v1.0
 * @create 2022-04-24@星期日
 **/
@SuppressWarnings("all")
public class UserDaoImpl implements IUserDao {
 
    //定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;
 
    @Override
    public User login(User user) {
        try {
            con = DBHelper.getCon();
            ps=con.prepareStatement("select * from car_user where account=?");
            ps.setString(1, user.getAccount());
            rs=ps.executeQuery();
            if(rs.next()){
                User u=new User();
                u.setId(rs.getInt(1));
                u.setAccount(rs.getString(2));
                u.setPassword(rs.getString(3));
                return u;
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBHelper.close(con,ps,rs);
        }
        return null;
    }
 
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值