加入购物车这里的逻辑性要求很高。为什么这么说呢?下面给出解释。
第一点:加入购物车是要根据该用户进入存数据,所有在添加购物车时要先把用户id同时加入。这里要获取Session里面的用户Id。
第二点:当加入的商品在该用户就原本就存在的商品呢?是不是要进行判断用户的购物车是否存在该商品,如果存在,就拿出数量进行累加。
第三点:当使用新增语句的话,是要把原来相同的商品信息的购物车数据删掉,当然最简单的方法是直接使用更新语句,这样就不用把原来的数据删掉,新增一个数据。
第四点然后用户还未登录,点击加入购物车是不是应该提示需要登录,并可以跳转到登录页面。
说了那么多,现在肝代码吧!
<a href="" target="_blank" onclick="addShopCart();" >加入购物车</a>
然后点击时进行判断
function addShopCart(){
//获取用户的id
var userid=<%= session.getAttribute("userId")%>;
if(userid==null){
var statu = confirm("亲,你还未登录哦,确认登录?");
if(!statu){
return false;
}
else{
//跳转到登录 页面
parent.location.href = "login.jsp";
}
}
else{
var config={
//发送请求的路径
"url":"InsertShopCartServlet",
"async":false,
"dataType":"text",
"type":"post",
//把商品的id和商品的数量传到后台
"data":{
"productId":$("#productId").val(),
"num":$("#num").val(),
},
"success":function(result){
alert(result);
},
"error":function(xhr,status,error){
}
};
$.ajax(config);
}
先建数据库和entity类吧
类型要一致
这里我没有用到Java实现表外关联,
public class ShopCart {
private Integer id;//主键
private Integer userId;//用户ID
private Integer productId;//商品Id
private String productName;//商品名称
private BigDecimal price;//商品价格
private String imgUrl;//商品图片地址
private Integer num;//商品数量
private String productDesc;//商品详情
private BigDecimal sum;//商品总价
public BigDecimal getSum() {
return sum;
}
public void setSum(BigDecimal sum) {
this.sum = sum;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
}
servlet层
//统一编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取session对象
HttpSession session=request.getSession();
//接收购物车数据
ShopCart shopCart=new ShopCart();
ProductService service2=new ProductService();
ShopCartService service=new ShopCartService();
//获取商品数量
String shuliang=request.getParameter("num");
//获取商品id
String productId=request.getParameter("productId");
//获取用户id
int userId=(int) session.getAttribute("userId");
if(productId!=null&&!productId.equals("")) {
int id=Integer.parseInt(productId);
if(shuliang!=null&&!shuliang.equals("")) {
int num=Integer.parseInt(shuliang);
//获取商品信息
Product product=service2.findThisShopCart(id);
//获取商品id
Integer Id=product.getId();
//获取商品名
String Name=product.getProductName();
//获取商品价格
BigDecimal price=product.getPrice();
//初始化商品的总价格
BigDecimal sum=price;
//获取图片地址
String imgUrl=product.getImgUrl();
//shopName为店铺名
String ShopName=product.getShopName();
//desc为商品详情
String productDesc=product.getDesc();
/*
* 将商品等字段添加到ShopCart类中,然后传到数据库进行处理
*/
//商品价格
shopCart.setPrice(price);
//商品名
shopCart.setProductName(Name);
//id为商品的id
shopCart.setProductId(id);
//商品图片
shopCart.setImgUrl(imgUrl);
//用户Id
shopCart.setUserId(userId);
//商品详情
shopCart.setProductDesc(productDesc);
/*
* 查询该用户的所有商品
*/
//根据用户Id把购物车商品查询出来
ShopCart shop=service.findAllShopCart(userId,Id);
if(shop==null) {
BigDecimal b1 = new BigDecimal(Integer.toString(num));
sum=price.multiply(b1);
shopCart.setSum(sum);
shopCart.setNum(num);
boolean addshopCart=service.insertShopCart(shopCart);
response.getWriter().write("加入购物车成功!");
}
else {
//商品在购物车里存在
int count=shop.getNum();
int shopId=shop.getId();
BigDecimal p=shop.getPrice();
num=num+count;
BigDecimal b1 = new BigDecimal(Integer.toString(num));
sum=p.multiply(b1);
//删除购物车
service.deleteShopCart(shopId);
//插入购物车表
sum=price.multiply(b1);
shopCart.setSum(sum);
shopCart.setNum(num);
boolean addshopCart=service.insertShopCart(shopCart);
response.getWriter().write("加入购物车成功!");
}
request.setAttribute("shopCart", shopCart);
return;
}
}
Service层
/*
* 添加购物车
*/
public boolean insertShopCart(ShopCart shopCart) {
boolean num;
num=this.dao.insertShopCart(shopCart);
return num;
}
/*
* 通过用户Id和商品Id,查询购物信息
*/
public ShopCart findAllShopCart(Integer userId,Integer productId) {
ShopCart shop =this.dao.getShopCart(userId,productId);
return shop;
}
/*
* 根据商品Id查询购物车是否存在
*/
public List<ShopCart> findShopCartProduct(Integer productId) {
List<ShopCart> list=null;
list=this.dao.getShopCartProduct(productId);
return list;
}
/*
* 根据购物车Id删除购物车
*/
public boolean deleteShopCart(Integer shopId) {
boolean num;
num=this.dao.deleteshopId(shopId);
return num;
}
Dao层
/*
* 根据用户Id查询购物车商品是否存在
*/
public List<ShopCart> getShopCartProduct(Integer productId){
List<ShopCart> list=null;
String sql="select * from shopCart where productId=?";
try {
list=(List<ShopCart>) runner.query(sql, new BeanListHandler(ShopCart.class),productId);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
/*
*添加购物车
*/
public boolean insertShopCart(ShopCart shopCart) {
int num=0;
//添加sql语句
String sql="insert into shopCart (userId,productId,productName,price,num,productDesc,imgUrl,sum) value(?,?,?,?,?,?,?,?)";
try {
num=runner.update(sql,shopCart.getUserId(),shopCart.getProductId(),shopCart.getProductName(),shopCart.getPrice(),shopCart.getNum(),shopCart.getProductDesc(),shopCart.getImgUrl(),shopCart.getSum());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return num>0;
}
/*
* 根据购物车ID删除购物车的商品
*/
public boolean deleteshopId(Integer id) {
int num=0;
String sql="delete from shopcart where id=?";
try {
num = runner.update(sql,id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return num>0;
}
购物车功能就这样实现了,喜欢的话记得点赞哦!您的点赞是我努力的动力