基于springboot框架的电脑商城项目(八)

这篇具有很好参考价值的文章主要介绍了基于springboot框架的电脑商城项目(八)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

显示购物车列表

(一)显示购物车列表(持久层)

1.规划sql

这里需要将商品表和购物车表进行连表查询

select uid,pid,cid,image,t_cart.price,t_cart.num,title,t_product.price as realprice, from t_cart left join t_product on t_cart.pid=t_product.id
where uid=?
order by t_cart.created+time desc
2.设计接口和抽象方法

在store包下创建一个vo包,在该包下面创建CartVO类,不需要继承BaseController类,那相应的就需要单独实现Serializable接口

VO全称Value Object,值对象。当进行select查询时,查询的结果属于多张表中的内容,此时发现结果集不能直接使用某个POJO实体类来接收,因为POJO实体类不能包含多表查询出来的信息,解决方式是:重新去构建一个新的对象,这个对象用于存储所查询出来的结果集对应的映射,所以把这个对象称之为值对象.

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CartVo implements Serializable {
    private Integer cid;
    private Integer pid;
    private Integer uid;
    private Long price;
private Integer num;
private String title;
private String image;
private Long realPrice;
}

在CartMapper接口中添加抽象方法

    List<CartVo> findByUid(Integer uid);

在CartMapper.xml文件中添加findVOByUid()方法的映射

    <select id="findByUid" resultType="com.cy.store.vo.CartVo">
   select cid,uid,pid,t_cart.price,t_cart.num,t_product.image,
          t_product.title,t_product.price as realPrice
from t_cart left join t_product on t_product.id=t_cart.pid
where uid=#{uid}
order by t_cart.created_time desc

    </select>

(二)显示购物车列表(业务层)

1.规划异常

查询不到就返回空,不需要规划异常

2.设计接口和抽象方法及实现

在ICartService接口中添加findVOByUid()抽象方法

//显示购物车列表
    List<CartVo> getByUid(Integer uid);

在CartServiceImpl类中重写业务接口中的抽象方法

    @Override
    public List<CartVo> getByUid(Integer uid) {
        List<CartVo> cartVoList = cartMapper.findByUid(uid);
        return cartVoList;
    }

(三)显示购物车列表(控制层)

1.处理异常

业务层没有抛出异常,所以这里不需要处理异常

2.设计请求

请求路径:/carts/
请求方式:GET
请求参数:HttpSession session
响应结果:JsonResult<List< CartVO>>

3.处理请求

在CartController类中编写处理请求的代码。

@GetMapping
public JsonResult<List<CartVo>> getCartList(HttpSession session){
    Integer getuidfromsession = getuidfromsession(session);
    List<CartVo> cartVoList = cartService.getByUid(getuidfromsession);
    return new JsonResult<>(ok,cartVoList);
}

(四)显示购物车列表(前端页面)

将cart.html页面的head头标签内引入的cart.js文件注释掉(这个就是文件的功能:点击"+“,”-",“删除”,"全选"等按钮时执行相应的操作)

<!-- <script src="../js/cart.js" type="text/javascript" charset="utf-8"></script> -->

form标签的action="orderConfirm.html"属性(规定表单数据提交到哪里)和结算按钮的类型"type=submit"是必不可少的,这样点击"结算"时才能将数据传给"确认订单页"并在"确认订单页"展示选中的商品数据
当然也可以把这两个删掉,然后给结算按钮添加"type=button"然后给该按钮绑定一个点击事件实现页面跳转和数据传递,但是这样太麻烦了

在cart.html页面body标签内的script标签中编写展示购物车列表的代码

<script type="text/javascript">
    $(document).ready(function() {
    showCartList();
	});

    //展示购物车列表数据
    function showCartList() {
        $("#cart-list").empty();
        $.ajax({
            url: "/carts",
            type: "GET",
            dataType: "JSON",
            success: function(json) {
                var list = json.data;
                for (var i = 0; i < list.length; i++) {
                    var tr = '<tr>\n' +
                        '<td>\n' +
                        '<input name="cids" value="#{cid}" type="checkbox" class="ckitem" />\n' +
                        '</td>\n' +
                        '<td><img src="..#{image}collect.png" class="img-responsive" /></td>\n' +
                        '<td>#{title}#{msg}</td>\n' +
                        '<td>¥<span id="goodsPrice#{cid}">#{singlePrice}</span></td>\n' +
                        '<td>\n' +
                        '<input type="button" value="-" class="num-btn" οnclick="reduceNum(1)" />\n' +
                        '<input id="goodsCount#{cid}" type="text" size="2" readonly="readonly" class="num-text" value="#{num}">\n' +
                        '<input class="num-btn" type="button" value="+" οnclick="addNum(#{cid})" />\n' +
                        '</td>\n' +
                        '<td><span id="goodsCast#{cid}">#{totalPrice}</span></td>\n' +
                        '<td>\n' +
                        '<input type="button" οnclick="delCartItem(this)" class="cart-del btn btn-default btn-xs" value="删除" />\n' +
                        '</td>\n' +
                        '</tr>';
                    tr = tr.replaceAll(/#{cid}/g, list[i].cid);
                    tr = tr.replaceAll(/#{image}/g, list[i].image);
                    tr = tr.replaceAll(/#{title}/g, list[i].title);
                    tr = tr.replaceAll(/#{singlePrice}/g, list[i].realPrice);
                    tr = tr.replaceAll(/#{num}/g, list[i].num);
                    tr = tr.replaceAll(/#{totalPrice}/g, list[i].realPrice * list[i].num);
                    if (list[i].realPrice < list[i].price) {
                        tr = tr.replace(/#{msg}/g, "比加入时降价" + (list[i].price - list[i].realPrice) + "元");
                    } else {
                        tr = tr.replace(/#{msg}/g, "");
                    }
                    $("#cart-list").append(tr);
                }
            },
            error: function (xhr) {
                alert("加载购物车列表数据时产生未知的异常"+xhr.status);
            }
        });
    }
</script>

增加商品数量

(一)增加商品数量(持久层)

1.规划sql

查询需要操作的购物车数据信息

SELECT * FROM t_cart WHERE cid=?
2.设计接口和抽象方法

在CartMapper接口中添加抽象方法

Cart findByCid(Integer cid);

在CartMapper文件中添加findByCid(Integer cid)方法的映射

    <select id="findByCid" resultMap="CartEntityMap">
select * from t_cart where cid=#{cid}
    </select>

(二)增加商品数量(业务层)

1.规划异常

在更新时产生UpdateException未知异常,此异常类无需再次创建
可能该购物车列表数据归属不是登录的用户,抛AccessDeniedException异常,此异常类无需再次创建
要查询的数据不存在.抛出CartNotFoundException异常,创建该异常类并使其继承ServiceException

/** 购物车数据不存在的异常 */
public class CartNotFoundException extends ServiceException {
    /**重写ServiceException的所有构造方法*/
}

2.设计接口和抽象方法及实现

在业务层ICartService接口中添加addNum()抽象方法

updateNumByCid方法.参数是cid,num,String modifiedUser,Date modifiedTime
findByCid方法.参数是cid在业务层中从购物车表查询到该商品的数量,然后再和前端传过来的增加的数量进行求和得到num所以该方法的参数是cid,uid,username

//查询购物车里的信息
   Integer addNum(Integer cid,Integer uid ,String username);

该方法返回值void.这样的话就需要在前端页面加location.href使该页面自己跳转到自己,实现刷新页面(不建议,每次都加载整个页面,数据量太大了)
返回值是Integer类型.这样的话就把数据库中更新后的数量层层传给前端,前端接收后填充到控件中就可以了

在CartServiceImpl类中实现接口中的抽象方法


    @Override
    public Integer addNum(Integer cid,Integer uid,String username) {
        Cart result = cartMapper.findByCid(cid);
        if (result==null){
            throw new CartNotFoundException("数据不存在");
        }
        Integer pid = result.getPid();
        Cart cart = cartMapper.findByUidAndPid(uid, pid);
        if (!cart.getUid().equals(uid)){
            throw new AccessDeniedException("数据访问异常");
        }
        Integer integer = cartMapper.updateNumByCid(cid, result.getNum()+1, username, new Date());
        if (integer!=1){
            throw new UpdateException("修改时产生异常");
        }
        return result.getNum()+1;
    }

(三)增加商品数量(控制层)

1.处理异常

在BaseController类中添加CartNotFoundException异常类的统一管理

else if (e instanceof CartNotFoundException) {
    result.setState(4007);
    result.setMessage("购物车表不存在该商品的异常");
}
2.设计请求

请求路径:/carts/{cid}/num/add
请求方式:post
请求参数:@PathVariable(“cid”) Integer cid, HttpSession session
响应结果JsonResult< Integer>

3.处理请求

在CartController类中添加处理请求的addNum()方法

@PostMapping("/{cid}/num/add")
    public JsonResult<Integer> addNum(@PathVariable("cid") Integer cid,HttpSession session){
    Integer getuidfromsession = getuidfromsession(session);
    String getusernamesession = getusernamesession(session);
    Integer integer = cartService.addNum(cid, getuidfromsession, getusernamesession);
    return new JsonResult<>(ok,integer);
}

(四)增加商品数量(前端页面)

1.首先确定在showCartList()函数中动态拼接的增加购物车按钮是绑定了addNum()事件,如果已经添加无需重复添加

<input class="num-btn" type="button" value="+" onclick="addNum(#{cid})" />

2.在script标签中定义addNum()函数并编写增加购物车数量的逻辑代码

function addNum(cid) {
    $.ajax({
        url: "/carts/"+cid+"/num/add",
        type: "POST",
        dataType: "JSON",
        success: function (json) {
            if (json.state == 200) {
                $("#goodsCount"+cid).val(json.data);//字符串+整数cid后结果为字符串

                //更新该商品总价
                /*
                            html()方法:
                            不传参:是获取某个标签内部的内容(文本或标签)
                            传参:将参数放到标签里面替换掉该标签原有内容
                            * */
                var price = $("#goodsPrice"+cid).html();
                var totalPrice = price * json.data;

                //将商品总价更新到控件中
                $("#goodsCast"+cid).html(totalPrice);
            } else {
                alert("增加购物车商品数量失败"+json.message);
            }
        },
        error: function (xhr) {
            alert("增加购物车商品数量时产生未知的异常!"+xhr.message);
        }
    });
}

减少商品数量

(一)减少商品数量(持久层)

1.规划sql
delete from t_cart where cid=?
2.设计接口和抽象方法

在CartMapper接口中添加抽象方法

Cart deleteByCid(Integer cid);

在CartMapper文件中添加findByCid(Integer cid)方法的映射

    <delete id="deleteByCid">
        delete from t_cart where cid=#{cid}
    </delete>

(二)减少商品数量(业务层)

1.规划异常

删除时产生的异常,前面已经开发过,无需重复开发

2.设计接口和抽象方法及实现

在业务层ICartService接口中添加reduceNum()抽象方法

updateNumByCid方法.参数是cid,num,String modifiedUser,Date modifiedTime
findByCid方法.参数是cid在业务层中从购物车表查询到该商品的数量,然后再和前端传过来的减少的数量进行相减得到num所以该方法的参数是cid,uid,username

//查询购物车里的信息
   Integer reduceNum(Integer cid,Integer uid ,String username);

该方法返回值void.这样的话就需要在前端页面加location.href使该页面自己跳转到自己,实现刷新页面(不建议,每次都加载整个页面,数据量太大了)
返回值是Integer类型.这样的话就把数据库中更新后的数量层层传给前端,前端接收后填充到控件中就可以了

在CartServiceImpl类中实现接口中的抽象方法


      @Override
    public Integer reduceNum(Integer cid, Integer uid, String username) {
        Cart result = cartMapper.findByCid(cid);
        if (result==null){
            throw new CartNotFoundException("数据不存在");
        }
        Integer pid = result.getPid();
        Cart cart = cartMapper.findByUidAndPid(uid, pid);
        if (!cart.getUid().equals(uid)){
            throw new AccessDeniedException("数据访问异常");
        }
        Integer num=result.getNum()-1;
        if (num==0){
            Integer integer = cartMapper.deleteByCid(cid);
            if (integer!=1){
                throw new DeleteException("删除时异常");
            }
        }else {
            Integer integer = cartMapper.updateNumByCid(cid, num, username, new Date());
            if (integer!=1){
                throw new UpdateException("修改时产生异常");
            }
        }

        return result.getNum()-1;
    }

(三)减少商品数量(控制层)

1.处理异常

异常已经处理过,无需重复处理

2.设计请求

请求路径:/carts/{cid}/num/reduce
请求方式:post
请求参数:@PathVariable(“cid”) Integer cid, HttpSession session
响应结果JsonResult< Integer>

3.处理请求

在CartController类中添加处理请求的reduceNum()方法

    @PostMapping("/{cid}/num/reduce")
    public JsonResult<Integer> reduceNum(@PathVariable("cid") Integer cid,HttpSession session){
        Integer getuidfromsession = getuidfromsession(session);
        String getusernamesession = getusernamesession(session);
        Integer integer = cartService.reduceNum(cid, getuidfromsession, getusernamesession);
        return new JsonResult<>(ok,integer);
    }

(四)减少商品数量(前端页面)

1.首先确定在showCartList()函数中动态拼接的减少购物车按钮是绑定reduceNum()事件,如果已经添加无需重复添加

<input class="num-btn" type="button" value="-" onclick="reduceNum(#{cid})" />

2.在script标签中定义reduceNum()函数并编写减少购物车数量的逻辑代码

	function reduceNum(cid) {
		$.ajax({
			url: "/carts/"+cid+"/num/reduce",
			type: "POST",
			dataType: "JSON",
			success: function (json) {
				if (json.state == 200) {
					$("#goodsCount"+cid).val(json.data);//字符串+整数cid后结果为字符串
					showCartList();
					//更新该商品总价
					/*
                    html()方法:
                    不传参:是获取某个标签内部的内容(文本或标签)
                    传参:将参数放到标签里面替换掉该标签原有内容
                    * */
					var price = $("#goodsPrice"+cid).html();
					var totalPrice = price * json.data;

					//将商品总价更新到控件中
					$("#goodsCast"+cid).html(totalPrice);
				} else {
					alert("减少购物车商品数量失败"+json.message);
				}
			},
			error: function (xhr) {
				alert("减少购物车商品数量时产生未知的异常!"+xhr.message);
			}
		});
	}

后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹
文章来源地址https://www.toymoban.com/news/detail-454011.html

到了这里,关于基于springboot框架的电脑商城项目(八)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于springboot框架的电脑商城项目(十)

    🎁🎁静态资源及sql文件分享 链接:https://pan.baidu.com/s/1X-yjmQcPD3PqS21x0HplNA?pwd=23gr 提取码:23gr 在store数据库中创建t_order和t_order_item数据表 在entity包下创建Order实体类并继承BaseEntity类 在com.cy.store.entity包下创建OrderItem实体类并继承BaseEntity类 1.规划sql 插入订单数据的SQL语句 插入

    2024年02月06日
    浏览(24)
  • 基于springboot框架的电脑商城项目(六)

    🎁🎁静态资源及sql文件分享 链接:https://pan.baidu.com/s/1X-yjmQcPD3PqS21x0HplNA?pwd=23gr 提取码:23gr 1.规划sql 在删除之前判断该数据是否存在,需要执行查询语句看能否查到该数据,还需要根据返回的aid获取uid并和session中的uid进行比较判断归属是否正确,这一条SQL语句在设置收货地址时

    2024年02月03日
    浏览(37)
  • 基于springboot框架的电脑商城项目(七)

    🎁🎁静态资源及sql文件分享 链接:https://pan.baidu.com/s/1X-yjmQcPD3PqS21x0HplNA?pwd=23gr 提取码:23gr 1.规划sql 根据商品id显示商品详情的SQL语句 2.设计接口和抽象方法 在ProductMapper接口中添加抽象方法 在ProductMapper.xml文件中配置findById(Integer id)方法的映射 2.规划异常 如果商品数据不存

    2024年02月05日
    浏览(29)
  • 【五一创作】基于springboot框架的电脑商城项目(三)

    1.规划sql 根据用户id修改信息的SQL语句 根据用户id查询的sql语句 2.接口与抽象方法 更新用户的信息方法的定义 在UserMapper.xml文件中进行映射编写 设计两个功能: 1.当打开页面时显示当前登录的用户的信息 2.点击修改按钮时更新用户的信息 1.异常规划 点击个人资料页面时可能找

    2024年02月04日
    浏览(35)
  • Springboot+mysql+基于VUE框架的商城综合项目设计与实现 毕业设计-附源码111612

    基于VUE框架的商城综合项目设计与实现 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,商城综合项目当然也不能排除在外。商城综合项目是以实际运用为开发背景,运用软件工程原理和开发方法,采用

    2024年02月01日
    浏览(48)
  • SpringBoot项目--电脑商城【上传头像】

    把文件存到数据库中,需要图片时访问数据库,数据库将文件解析为字节流返回,最后写到本地的某一个文件.这种方法太耗费资源和时间了 将对应的文件保存在操作系统上,然后再把这个 文件路径记录下 来,因为在记录路径的时候是非常便捷和方便的,将来如果要打开这个文件可以

    2024年02月09日
    浏览(24)
  • SpringBoot项目--电脑商城【确认订单】

    用户在购物车列表页中通过随机勾选相关的商品,在点击\\\"结算\\\"按钮后跳转到\\\"确认订单页\\\",在这个页面中需要展示用户在上个页面所勾选的\\\"购物车列表页\\\"中对应的数据.说白了也就是列表展示,且展示的内容还是来自于购物车表.但是用户勾选了哪些商品呢,所 以\\\"购物车列表页\\\"需

    2024年02月09日
    浏览(25)
  • SpringBoot项目--电脑商城【新增收货地址】

    t_address 注意name是,所以需要用`` 在entity包下创建实体类Address继承BaseEntity类 当前收货地址功能模块: 第一个页面:列表的展示,修改,删除,设置默认 第二个页面:新增收货地址 开发顺序:新增收货地址-列表的展示-设置默认收货地址-删除收货地址-修改收货地址 1.新增收货地

    2024年02月09日
    浏览(30)
  • SpringBoot项目实战笔记:电脑商城项目实战(SpringBoot+MyBatis+MySQL)

    花了一段实现刚学完SpringBoot,做个项目练练手。教程视频来源于B站。 视频链接: 【SpringBoot项目实战完整版】SpringBoot+MyBatis+MySQL电脑商城项目实战_哔哩哔哩_bilibili 目录 一、系统概述与环境搭建 1. 系统开发及运行环境 2.项目分析 3.创建项目 4.配置并运行项目 4.1 运行项目

    2024年02月12日
    浏览(26)
  • SpringBoot项目--电脑商城【加入购物车】

    1.使用use命令先选中store数据库 2.在store数据库中创建t_cart用户数据表 在entity包下创建购物车的Cart实体类并使其继承BaseEntity 1.向购物车表中插入商品数据的SQL语句 2.如果当前商品已经在购物车存在,则直接更新商品即可 3.在插入或者更新具体执行哪个语句,取决于数据库中是否

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包