JSP购物车案例精简版-适合小白学习
double totalprice = unitprice*this.quantity;
//返回购物项的总价格
return totalprice;
}
public void setPrice(double price) {
this.price = price;
}
}
购物车实体
package entity;
import java.util.LinkedHashMap;
import java.util.Map;
/**
- 购物车实体
*/
public class Cart {
//键是书籍的id,值是书
private Map<String,CartItem> bookmap = new LinkedHashMap<>();
//购物车总价
private double price;
//把购物项(用户传递进来的书籍)添加到购物车里面去
public void addBook(Book book){
//获取得到的购物项
CartItem cartItem = bookmap.get(book.getId());
//判断购物车是否存在购物项,如果不存在
if (cartItem==null){
//创建这个购物对象
cartItem = new CartItem();
//将用户传递过来的书籍作为购物项
cartItem.setBook(book);
//默认把该书籍的数量设置为1
cartItem.setQuantity(1);
//把购物项添加到购物车去
bookmap.put(book.getId(),cartItem);
}else {
//如果购物项存在,将购物项的数量+1
cartItem.setQuantity(cartItem.getQuantity()+1);
}
}
public Map<String, CartItem> getBookmap() {
return bookmap;
}
public void setBookmap(Map<String, CartItem> bookmap) {
this.bookmap = bookmap;
}
/**
-
//购物车的总价格就是所有的购物项价格加起来
-
@return
*/
public double getPrice() {
//默认购物车总价格为 0
double totalprice = 0;
//对bookmap进行遍历
for (Map.Entry<String, CartItem> me : bookmap.entrySet()) {
//得到每个购物项
CartItem cartItem = me.getValue();
//将每个购物项的钱加起来,就是购物车的总价了
totalprice+=cartItem.getPrice();
}
return totalprice;
}
public void setPrice(double price) {
this.price = price;
}
}
数据库这里为了方便就用Map集合代替,关键是要懂原理
package dao;
import entity.Book;
import java.util.LinkedHashMap;
import java.util.Map;
/**
- 用集合模拟数据库
*/
public class bookDB {
//既然是购物车案例,应该会有增删的操作,通过关键字查询书籍,所以使用LinkedHashMap集合
private static Map<String, Book> map = new LinkedHashMap<>();
static {
map.put(“1”,new Book(“1”, “java”, “zhongfucheng”, “好书”, 99));
map.put(“2”,new Book(“2”, “javaweb”, “ouzicheng”, “不好的书”, 44));
map.put(“3”,new Book(“3”, “ajax”, “xiaoming”, “一般般”, 66));
map.put(“4”,new Book(“4”, “spring”, “xiaohong”, “还行”, 77));
map.put(“5”,new Book(“5”, “Java入门到入土”, “LCZ”, “veryGood!”, 99999));
}
//返回map集合
public static Map<String, Book> getAll() {
return map;
}
}
dao层应该至少提供获取所有的书籍和根据关键字获取得到书籍
package dao;
import entity.Book;
import java.util.Map;
/**
- 获取所有的书籍和根据关键字获取得到书籍
*/
public class bookDao {
//获取存放着书籍的Map集合
public Map getAll() {
return bookDB.getAll();
}
//根据关键字获取某本书籍
public Book find(String id) {
return bookDB.getAll().get(id);
}
}
service层就是对DAO层的一个封装
这里也为了方便就将所有功能写到一个类中
package service;
import dao.bookDao;
import entity.Book;
import entity.Cart;
import java.util.Map;
/**
- 业务层(对dao层的封装)
*/
public class BusinessService {
//实例化dao
bookDao bookDao = new bookDao();
/列出所有的书/
public Map getAll() {
return bookDao.getAll();
}
/根据书的id获取书/
public Book findBook(String id) {
return bookDao.find(id);
}
/*
-
在购买书籍的时候,我们发现需要将书籍添加到购物车上
-
如果我们直接在Servlet上使用Cart实体对象的addBook()和BookDao对象的find()方法,是可以完成功能的
-
但是,这样web层的程序就跟Dao层的耦合了,为了代码性的健壮性和解耦,我们在BusinessService中对他俩进行封装
-
于是有了buyBook()这个方法!
-
*/
/把用户想买的书籍添加到当前用户的购物车上/
public void buyBook(String id, Cart cart)