IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Boot电商项目49:购物车模块七:【选中/不选中购物车的某个商品】接口; -> 正文阅读

[Java知识库]Spring Boot电商项目49:购物车模块七:【选中/不选中购物车的某个商品】接口;

说明:

(1)本篇博客主要内容是开发【选中/不选中购物车的某个商品】接口;其实,这儿选中与否,就是更新购物车中该商品的selected字段的值;

(2)一个尚未解决、需要留意的疑惑:自己并没有在实际中,开发过【电商系统】;所以,有这个疑惑:【购物车中,某个商品是否被勾选】,究竟需不需要在数据库中中增加一个字段来表征;是不是,在有的电商系统中,【购物车中,某个商品是否被勾选】这个活完全交给前端就行了?(PS:这个疑问尚未解决;目前采用本项目的做法即可;)

(3)PS:本篇博客内容,比较简单;

目录

一:【选中/不选中购物车的某个商品】接口说明;

1.【选中/不选中购物车的某个商品】接口文档;

2.【选中/不选中购物车的某个商品】接口,在界面上的表现;

二:正式开发;

1.在CartController中,创建选中/不选中购物车的某个商品的方法:select()方法;

2.在CartServiceImpl中,创建选中/不选中购物车的某个商品的逻辑方法:selectOrNot()方法;并在CartService中反向生成方法的声明;

(1)在CartServiceImpl中,创建选中/不选中购物车的某个商品的逻辑方法:selectOrNot()方法;

(2)在CartService中反向生成方法的声明;

3.在CartMapper中定义【根据userId、ProductId、selected,更新购物车中某个商品的selected字段】的方法,selectOrNot()方法;并在CartMapper.xml中,编写实现SQL;

(1)在CartMapper中定义【根据userId、ProductId、selected,更新购物车中某个商品的selected字段】的方法,selectOrNot()方法;

(2)在CartMapper.xml中,编写实现SQL;

三:测试;


一:【选中/不选中购物车的某个商品】接口说明;

1.【选中/不选中购物车的某个商品】接口文档;

2.【选中/不选中购物车的某个商品】接口,在界面上的表现;

待写,项目上线后,回来补……


二:正式开发;

1.在CartController中,创建选中/不选中购物车的某个商品的方法:select()方法;

    /**
     * 购物车模块:选中/不选中购物车的某个商品
     * @param productId
     * @param selected
     * @return
     */
    @ApiOperation("选中/不选中购物车的某个商品")
    @PostMapping("/select")
    public ApiRestResponse select(@RequestParam("productId") Integer productId,
                                  @RequestParam("selected") Integer selected) {
        List<CartVO> cartVOList = cartService.selectOrNot(UserFilter.currentUser.getId(), productId, selected);
        return ApiRestResponse.success(cartVOList);
    }

说明:

(1)url,请求方式,参数要符合接口要求;

(2)同样,这儿出于安全考虑,防止横向越权,用户id,我们从程序中获取;

(3)有关Service层的,选中/不选中购物车的某个商品的逻辑方法,selectOrNot()方法,在下一部分介绍;

2.在CartServiceImpl中,创建选中/不选中购物车的某个商品的逻辑方法:selectOrNot()方法;并在CartService中反向生成方法的声明;

(1)在CartServiceImpl中,创建选中/不选中购物车的某个商品的逻辑方法:selectOrNot()方法;

    /**
     * 选中/不选中购物车的某个商品
     * @param userId
     * @param productId
     * @param selected
     * @return
     */
    @Override
    public List<CartVO> selectOrNot(Integer userId, Integer productId, Integer selected) {
        //首先,根据userId和productId,去查一下,看购物车中是否有对应的数据
        Cart cart = cartMapper.selectCartByUserIdAndProductId(userId, productId);
        if (cart == null) {
            //所以,如果购物车中没有这个商品;那么很显然,是无法选中(都没有,怎么更新其selected字段的值);于是,就抛出“更新失败”异常;
            throw new ImoocMallException(ImoocMallExceptionEnum.UPDATE_FAILED);
        } else {
            //如果购物车中有这个商品,那么我们就可以正常去更新其selected字段了
            cartMapper.selectOrNot(userId, productId, selected);
        }
        return this.list(userId);
    }

说明:

(1)有一句话说得好,优秀的程序员之所以优秀,不仅因为其可以编写正确的逻辑,更多是其能够考虑到所有意外的情况;所以,这儿,我们就考虑到了意外的情况,并做了处理;

(2)如果在数据中有对应的数据,那么我们就去更改选中状态;(其实就是更新selected字段);selectOrNot()方法,在下一部分介绍;

(3)一个需要特别说明的点:

? ? ? ? ? ● 其实但就这一个业务来说,Dao层的方法,可以这些写:

? ? ? ? ? ● 那么,至于为什么没有这样写,是因为:【选中/不选中购物车的某个商品接口】和【全选/全不选购物车的某个商品接口】,差不多,我们想在这两个接口中,复用一点东西,以节省点工作量;

? ? ? ? ? ●?自然,为此,这儿有很多种可行的策略;

? ? ? ? ? ●?只是,这儿我们采取的策略是:(【全选/全不选购物车的某个商品】接口在下一篇博客介绍)

? ? ? ? ? ●?所以,这儿我们的Dao层的方法,没有写成【selectOrNot(cart.getId(),selected);】这种传cartId的形式;而是写成了【selectOrNot(userId, productId, selected);】这种传userId和productId的形式;

? ? ? ? ? ●?还是那句话,为了解决同一个业务,会有很多可行的策略;我们需要做的就是,在自己能力范围内,尽量选择一个明确的、更好的策略;


(2)在CartService中反向生成方法的声明;

3.在CartMapper中定义【根据userId、ProductId、selected,更新购物车中某个商品的selected字段】的方法,selectOrNot()方法;并在CartMapper.xml中,编写实现SQL;

(1)在CartMapper中定义【根据userId、ProductId、selected,更新购物车中某个商品的selected字段】的方法,selectOrNot()方法;

    /**
     * 根据userId、ProductId、selected,更新购物车中某个商品的selected字段
     * @param userId
     * @param productId
     * @param selected
     * @return
     */
    Integer selectOrNot(@Param("userId") Integer userId, @Param("productId") Integer productId,
                        @Param("selected") Integer selected);

(2)在CartMapper.xml中,编写实现SQL;

  <update id="selectOrNot">
    update imooc_mall_cart
    set selected = #{selected}
    where user_id = #{userId}
    and product_id = #{productId}
  </update>

说明:

(1)这儿的内容,见过N次了,没什么好说的;还是那句话,建议使用(“自认为”)标准的、更完美的方案;(可以参考【附加:Mybatis传递多个参数时的处理策略;(包括:是否使用@Param注解,parameterType=“”的使用,使用Map或者List接收;)】)?


三:测试;

启动项目;

……………………………………………………

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:21:19  更:2022-03-24 00:22:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:22:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码