购物车功能后端实现案例

说明:案例使用的是ssm+springBoot+springCloud+redis

表结构:

通过用户id和商品id构建关系,所以一个user_id在表中会有多条。
在这里插入图片描述

查询购物车消息功能:

思路很简单,就是把用户id从前端传入进来后端,接收用户id,用此id去表里查数据,然后返回一个储存购物车对象的list给前端就可以。

controller层代码:

  //根据userId查询用户的购物车list
    @RequestMapping("query")
    public List<Cart> queryMyCarts(String userId){
        return cartService.queryMyCarts(userId);
    }

service层代码:

 //使用用户id查找用户加入购物车的商品
    public List<Cart> queryMyCarts(String userId) {
        return cartMapper.selectCartByUserid(userId);
    }

mapper和mappers:

List<Cart> selectCartByUserid(String userId);
-------------------------------------------------
<!--select查询我的购物车-->
    <select id="selectCartByUserid" resultType="Cart">
        select * from t_cart where user_id=#{userId};
    </select>

新增商品到购物车功能:

当你在浏览某件商品,需要把他加入购物车,这时就会有两种情况:
1.这个商品之前你已经把他添加到过购物车,所以这一次的添加,实际上是对一个数量的修改,属于update操作。我们需要更新表中对应商品的num值即可
2.此商品在购物车中没有,所以这个操作属于insert操作。我们需要对表进行一次插入操作。
因为这一次使用了微服务之间的调用,所以使用到了ribbon

启动类中:

    @Bean
    @LoadBalanced
    public RestTemplate init(){
        return new RestTemplate();
    }

controller层:

 //新增商品到我的购物车
    @RequestMapping("save")
    public SysResult addCart(Cart cart){
        try{
            cartService.addCart(cart);
            return SysResult.ok();
        }catch (Exception e){
            e.printStackTrace();
            return SysResult.build(201,"新增购物车失败",null);
        }
    }

service层:

    @Autowired
    private RestTemplate template;
    
public void addCart(Cart cart) {//这次从前端获取到的数据只有userId 和productId
        //通过数据查询从数据库查询已有,所以执行的是update操作
        Cart existCart=cartMapper.selectCartByUseridAndProductid(cart);
        if(existCart!=null){
            //说明购物车商品在表格中已存在的
            //把已存在的商品num+新增商品num
            //update t_cart set num=num+#{num} 更新num功能中重新写sql
            //update t_cart set num=#{num} 更新num可以直接调用
            cart.setNum(cart.getNum()+existCart.getNum());
            cartMapper.updateNumByUseridAndProductid(cart);
        }else{//需要新增一个cart对象到数据库
            //cart对象中只有userId productId num 没有productName productPrice productImage
            //RestTemplate 发送微服务调用 请求商品系统的单个商品查询功能
            String url="http://productservice/product/manage/item/"+cart.getProductId();
            Product p=template.getForObject(url, Product.class);
            if(p!=null){//说明商品系统查到了数据
                cart.setProductName(p.getProductName());
                cart.setProductPrice(p.getProductPrice());
                cart.setProductImage(p.getProductImgurl());
                cartMapper.insertCart(cart);
            }else{
                throw new RuntimeException("从商品系统根本没查到商品数据");
            }

        }
    }

mapper和mappers:

   Cart selectCartByUseridAndProductid(Cart cart);
   void updateNumByUseridAndProductid(Cart cart);
   void insertCart(Cart cart);
   --------------------------------------------------
     <!--查询已存在-->
    <select id="selectCartByUseridAndProductid" resultType="Cart">
        select * from t_cart where user_id=#{userId}
        and product_id=#{productId};
    </select>
    <!--更新num-->
    <update id="updateNumByUseridAndProductid">
        update t_cart set num=#{num} where user_id=#{userId}
        and product_id=#{productId};
    </update>
    <!--新增购物车-->
    <insert id="insertCart">
        insert into t_cart (
        user_id,product_id,num,
        product_name,product_price,product_image) values (
        #{userId},#{productId},#{num},
        #{productName},#{productPrice},#{productImage}
        )
    </insert>

修改购物车里的商品数量:

这里做的很简单了,就是去修改表里的num值。(后面这个是我的猜想,我也没有做过,大家可以看看对不对)还可以把它做到缓存里,当你每次修改完购物车信息,就可以把user_id+uuid+product_id生成一个key,把商品信息转换成一个json作为value,存入redis缓存中,同时把user_id+uuid+product_id存入cookie的value中,当用户下次再点击购物车,如果没有正在修改,则从缓存中查询数据。也可以做数据一致性。

controller层:

   //购物车商品的更新
    //接收到的num数量就是更新的最终数量 不要和旧数据相加
    @RequestMapping("update")
    public SysResult updateNum(Cart cart){
        //cart参数包含了 productId userId num
        try{
            cartService.updateNum(cart);
            return SysResult.ok();
        }catch (Exception e){
            e.printStackTrace();
            return SysResult.build(201,"更新num失败",null);
        }
    }

service层:

  public void updateNum(Cart cart) {
        //持久层在新增购物车时完成了更新num的功能
        cartMapper.updateNumByUseridAndProductid(cart);
    }

mapper和mappers:

  void updateNumByUseridAndProductid(Cart cart);
  -----------------------------------------------
     <!--更新num-->
    <update id="updateNumByUseridAndProductid">
        update t_cart set num=#{num} where user_id=#{userId}
        and product_id=#{productId};
    </update>

删除商品再购物车中的信息:

这个更简单,就是删除数据库一条记录,如果再redis中做了缓存,把缓存也一起删了就可以。

controller层:

 @RequestMapping("delete")
    public SysResult deleteCart(Cart cart){
        //cart中只包含2个数据 userId productId
        try{
            cartService.deleteCart(cart);
            return SysResult.ok();
        }catch (Exception e){
            e.printStackTrace();
            return SysResult.build(201,"删除购物车失败",null);
        }
    }

service层:

    public void deleteCart(Cart cart) {

        cartMapper.deleteCartByUseridAndProductid(cart);
    }

mapper和mappers:

void deleteCartByUseridAndProductid(Cart cart);
--------------------------------------------------
    <delete id="deleteCartByUseridAndProductid">
        delete from t_cart where user_id=#{userId}
        and product_id=#{productId};
    </delete>
  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 购物车页面是一个常见的电商应用中的重要页面,通过展示用户选择的商品清单,方便用户查看、编辑和结算购物车中的商品。 Android Studio 是一款专业的 Android 开发工具,提供了丰富的组件和功能,可以轻松实现购物车页面的设计与开发。 具体实现购物车页面可以参考以下步骤: 1. 创建布局文件:在 Android Studio 中创建一个新的布局文件,用于展示购物车页面的UI。可以使用各种组件如RecyclerView、TextView、Button等来显示商品信息、数量、价格等。 2. 绑定数据:在购物车页面的 Activity 或 Fragment 中,使用适配器(Adapter)将购物车数据绑定到布局文件中的组件上。适配器可以继承RecyclerView.Adapter类,实现数据的绑定与渲染。 3. 实现交互功能:为购物车页面添加相应的交互功能,比如点击商品跳转到商品详情页面、增加或减少商品数量、删除商品等。可以使用事件监听器来实现这些功能,并更新数据适配器以刷新页面。 4. 数据管理:购物车页面需要实时反映用户在其它页面(比如商品列表页面)上的操作,例如添加商品到购物车或从购物车中删除商品。可以通过数据库或全局变量来管理购物车数据的增删改查。 5. 结算功能:购物车页面通常提供结算功能。可以添加一个“结算”按钮,当用户点击按钮,将购物车中的商品信息传递给后台服务器进行结算处理,并跳转到支付页面或者显示支付二维码。 通过以上步骤,您可以在 Android Studio 中实现一个基础的购物车页面。当然,具体的实现还取决于您的需求和设计风格,可以根据需要进行个性化的定制和优化。希望对您有所帮助! ### 回答2: 购物车页面是电商应用中非常常见的一个功能,Android Studio 是一款非常强大的集成开发环境,可以用来开发各种类型的 Android 应用程序。在 Android Studio 中实现购物车页面也是非常简单的。 首先,我们需要在 Android Studio 中创建一个新的项目,并添加一个购物车页面的布局文件。这可以通过在项目视图中右键点击“res”文件夹,选择“New”->“Layout resource file”来完成。在布局文件中,我们可以使用各种 Android 布局和控件来构建购物车页面的界面,比如列表视图、文本视图、按钮等。 接下来,我们需要在购物车页面的 Java 文件中,编写逻辑代码来实现购物车的功能。首先,我们可以使用 RecyclerView 来展示购物车中的商品列表,这可以通过在布局文件中添加一个 RecyclerView 控件,并在 Java 文件中创建一个适配器来实现。适配器可以帮助我们展示购物车中的商品信息,并响应用户操作,比如删除商品、修改商品数量等。 在购物车页面中,我们还可以添加其他的功能,比如结算购物车、清空购物车等。这些功能可以通过添加按钮和事件监听器来实现。当用户点击结算按钮,我们可以计算购物车中商品的总价,并跳转到支付页面;当用户点击清空购物车按钮,我们可以清空购物车中的商品列表。 除了基本的购物车功能,我们还可以通过与后端服务器进行交互,实现更复杂的功能,比如根据用户的收货地址计算运费、根据库存信息判断商品是否可购买等。这可以通过使用网络请求库来实现,比如 Retrofit 或 Volley,通过向服务器发送请求,接收服务器返回的数据,并进行相应的处理。 综上所述,通过使用 Android Studio ,我们可以方便地实现购物车页面的开发。通过布局文件和逻辑代码的编写,我们可以展示购物车中的商品列表,并实现各种购物车的功能。同,我们还可以通过与后端服务器的交互,实现更复杂的功能。使用 Android Studio,开发购物车页面变得更加简单、快捷。 ### 回答3: Android Studio 是一款非常流行的用于开发Android应用程序的集成开发环境,而CSDN是国内知名的技术博客社区。在Android Studio中实现购物车页面,可以按照以下步骤进行操作: 1. 首先,创建一个新的Android项目,并在布局文件中设计购物车页面的UI。可以使用LinearLayout、RelativeLayout等布局容器,添加TextView、ImageView、Button等控件实现页面的显示和交互。 2. 在Java代码中,定义购物车页面的逻辑,包括商品的添加、删除、数量的增减等功能。可以使用ArrayList或HashMap等数据结构存储购物车中的商品信息,并通过Adapter将数据与列表控件关联起来,实现商品列表的展示。 3. 添加监听器来处理用户操作。例如,通过监听商品列表中删除按钮的点击事件,实现删除商品的功能;通过监听商品数量增减按钮的点击事件,实现购物数量的调整等。 4. 在购物车页面中,可以添加一些统计功能,如购物车中商品的总数量和总价格等。在Java代码中,对购物车中的商品进行遍历,并计算商品数量和价格的总和,在界面上展示出来。 5. 如果需要与后端服务器进行交互,可以使用网络请求库(如OkHttp、Retrofit等)发送请求。例如,将购物车中的商品信息发送给服务器进行后续处理,或者从服务器获取商品信息进行展示。 以上是使用Android Studio实现购物车页面的基本步骤。通过合理设计UI布局,处理用户操作和展示数据,就可以实现一个功能完善的购物车页面。在CSDN中可以找到更多关于Android开发的教程和案例,帮助开发者更好地实现购物车功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛像话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值