栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

10天手敲一个SpringBoot网上商城项目(七)——显示商品详情/加入购物车

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

10天手敲一个SpringBoot网上商城项目(七)——显示商品详情/加入购物车

静态资源及sql文件分享
链接:https://pan.baidu.com/s/1X-yjmQcPD3PqS21x0HplNA?pwd=23gr
提取码:23gr

文章目录
    • 显示商品详情
      • 1.显示商品详情-持久层
        • 1.1规划需要执行的SQL语句
        • 1.2设计接口和抽象方法
        • 1.3编写映射
      • 2.显示商品详情-业务层
        • 2.1规划异常
        • 2.2设计接口和抽象方法及实现
      • 3.显示商品详情-控制层
        • 3.1处理异常
        • 3.2 设计请求
        • 3.3处理请求
      • 4.显示商品详情-前端页面
    • 加入购物车
      • 1.创建数据表
      • 2.创建购物车的实体类
      • 3.加入购物车-持久层
        • 3.1规划需要执行的SQL语句
        • 3.2设计接口和抽象方法
        • 3.3编写映射
        • 3.4单元测试
      • 4.加入购物车-业务层
        • 4.1规划异常
        • 4.2设计接口和抽象方法及实现
        • 4.3单元测试
      • 5.加入购物车-控制层
        • 5.1处理异常
        • 5.2设计请求
        • 5.3处理请求
      • 6.加入购物车-前端页面

显示商品详情 1.显示商品详情-持久层 1.1规划需要执行的SQL语句

根据商品id显示商品详情的SQL语句

SELECt * FROM t_product WHERe id=?
1.2设计接口和抽象方法

在ProductMapper接口中添加抽象方法

Product findById(Integer id);
1.3编写映射

在ProductMapper.xml文件中配置findById(Integer id)方法的映射


    select * from t_product where id=#{id}

2.显示商品详情-业务层 2.1规划异常

如果商品数据不存在,应该抛出ProductNotFoundException,所以创建ProductNotFoundException异常类并使其继承ServiceException

public class ProductNotFoundException extends ServiceException {
    
}
2.2设计接口和抽象方法及实现

1.在业务层IProductService接口中添加findById(Integer id)抽象方法

Product findById(Integer id);

2.在ProductServiceImpl类中,实现接口中的findById(Integer id)抽象方法

@Override
public Product findById(Integer id) {
    Product product = productMapper.findById(id);
    // 判断查询结果是否为null
    if (product == null) {
        throw new ProductNotFoundException("尝试访问的商品数据不存在");
    }
    // 将查询结果中的部分属性设置为null
    product.setPriority(null);
    product.setCreatedUser(null);
    product.setCreatedTime(null);
    product.setModifiedUser(null);
    product.setModifiedTime(null);

    return product;
}
3.显示商品详情-控制层 3.1处理异常

在BaseController类中的handleException()方法中添加处理ProductNotFoundException的异常

else if (e instanceof ProductNotFoundException) {
	result.setState(4006);
    result.setMessage("访问的商品数据不存在的异常");
}
3.2 设计请求
  • /products/{id}/details
  • Integer id
  • GET
  • JsonResult
3.3处理请求

在ProductController类中添加处理请求的getById()方法

@GetMapping("{id}/details")
public JsonResult getById(@PathVariable("id") Integer id) {
    Product data = productService.findById(id);
    return new JsonResult(OK, data);
}
4.显示商品详情-前端页面

1.首页将商品id发送给详情页后,详情页需要从url中裁取获得该id,实现方法在jquery-getUrlParam.js中(目前怎么实现裁取可以先不学),所以需要在product.html页面中导入该js文件,这里我在body标签内部的最后引入该js文件


2.在product.html页面中body标签内部的最后添加获取当前商品详情的代码


加入购物车 1.创建数据表

1.使用use命令先选中store数据库

USE store;

2.在store数据库中创建t_cart用户数据表

CREATE TABLE t_cart (
	cid INT AUTO_INCREMENT COMMENT '购物车数据id',
	uid INT NOT NULL COMMENT '用户id',
	pid INT NOT NULL COMMENT '商品id',
	price BIGINT COMMENT '加入时商品单价',
	num INT COMMENT '商品数量',
	created_user VARCHAr(20) COMMENT '创建人',
	created_time DATETIME COMMENT '创建时间',
	modified_user VARCHAr(20) COMMENT '修改人',
	modified_time DATETIME COMMENT '修改时间',
	PRIMARY KEY (cid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.创建购物车的实体类

在entity包下创建购物车的Cart实体类并使其继承BaseEntity

public class Cart extends BaseEntity {
    private Integer cid;
    private Integer uid;
    private Integer pid;
    private Long price;
    private Integer num;

}
3.加入购物车-持久层 3.1规划需要执行的SQL语句

1.向购物车表中插入商品数据的SQL语句

insert into t_cart (除了cid以外的所有字段) values (匹配的值列表);

2.如果当前商品已经在购物车存在,则直接更新商品即可

update t_cart set num=? where cid=?

3.在插入或者更新具体执行哪个语句,取决于数据库中是否有当前的这个购物车商品的数据,需要查询语句才能确定

select * from t_cart where uid=? and pid=?
3.2设计接口和抽象方法

在mapper包下创建CartMapper接口,并添加抽象方法

public interface CartMapper {
    
    
    Integer insert(Cart cart);

    
    Integer updateNumByCid(
            @Param("cid") Integer cid,
            @Param("num") Integer num,
            @Param("modifiedUser") String modifiedUser,
            @Param("modifiedTime") Date modifiedTime);

    
    Cart findByUidAndPid(
            @Param("uid") Integer uid,
            @Param("pid") Integer pid);
}
3.3编写映射

在resources.mapper文件夹下创建CartMapper.xml文件,并在文件中配置以上三个方法的映射




    
        
        
        
        
        
    

    
    
        insert into t_cart (uid, pid, price, num, created_user, created_time, modified_user, modified_time)
        values (#{uid}, #{pid}, #{price}, #{num}, #{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime})
    

    
    
        update t_cart set
            num=#{num},
            modified_user=#{modifiedUser},
            modified_time=#{modifiedTime}
        where cid=#{cid}