SpringBoot百货超市商城系统 附带详细运行指导视频
文章目录
- 一、项目演示
- 二、项目介绍
- 三、运行截图
- 四、主要代码
一、项目演示
项目演示地址: 视频地址
二、项目介绍
项目描述:这是一个基于SpringBoot框架开发的百货超市系统。首先,这是一个很适合SpringBoot初学者学习的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能完备,具有一个百货超市商城系统的所有基础功能。
项目功能:此项目分为两个角色:普通用户和管理员。普通用户有登录注册、浏览商品信息、添加购物车、提交订单、管理个人信息、管理个人订单等等功能。管理员有管理所有商品信息、管理所有订单信息、管理所有用户信息、查看收益数据图表等等功能。
应用技术:SpringBoot + MyBatis + Thymeleaf + Bootstrap + MySQL
运行环境:Eclipse/IntelliJ IDEA(项目压缩包中自带) + MySQL5.7(项目压缩包中自带) + Maven3.6.3(项目压缩包中自带) + JDK1.8(项目压缩包中自带)
三、运行截图

















四、主要代码
1.提交订单代码:
/*** 结算订单操作* @param orderDTO* @param request* @return*/@Overridepublic ResponseDTO<Boolean> submitOrder(OrderDTO orderDTO, HttpServletRequest request) {// 进行统一表单验证CodeMsg validate = ValidateEntityUtil.validate(orderDTO);if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {return ResponseDTO.errorByMsg(validate);}User user = (User) request.getSession().getAttribute(SessionConstant.HOME_SESSION_LOGIN_KEY);CartExample cartExample = new CartExample();cartExample.createCriteria().andUserIdEqualTo(user.getId());List<Cart> cartList = cartMapper.selectByExample(cartExample);BigDecimal totalPrice = new BigDecimal(0);Order order = CopyUtil.copy(orderDTO, Order.class);order.setId(UuidUtil.getShortUuid());order.setUserId(user.getId());order.setDeleted(OrderDeleteEnum.NO.getCode());order.setCreateTime(new Date());List<OrderItem> orderItemList = new ArrayList<>();// 验证库存和计算总价for(Cart cart : cartList) {Product product = productMapper.selectByPrimaryKey(cart.getProductId());if(cart.getQuantity() > product.getStock()) {CodeMsg codeMsg = CodeMsg.PRODUCT_STOCK_OVER;codeMsg.setMsg("商品【" + product.getName() + "】库存不足!");return ResponseDTO.errorByMsg(codeMsg);}totalPrice = totalPrice.add(product.getPrice().multiply(new BigDecimal(cart.getQuantity())));OrderItem orderItem = new OrderItem();orderItem.setId(UuidUtil.getShortUuid());orderItem.setProductId(cart.getProductId());orderItem.setOrderId(order.getId());orderItem.setProductName(product.getName());orderItem.setProductPhoto(product.getPhoto());orderItem.setProductPrice(product.getPrice());orderItem.setQuantity(cart.getQuantity());orderItem.setSumPrice(new BigDecimal(cart.getQuantity()).multiply(product.getPrice()));orderItemList.add(orderItem);}// 订单详情落库for(OrderItem orderItem : orderItemList) {if(orderItemMapper.insertSelective(orderItem) == 0) {throw new RuntimeException(CodeMsg.ORDER_ADD_ERROR.getMsg());}}// 订单数据落地order.setState(OrderStateEnum.PAYED.getCode());order.setTotalPrice(totalPrice);if(orderMapper.insertSelective(order) == 0) {throw new RuntimeException(CodeMsg.ORDER_ADD_ERROR.getMsg());}// 清空购物车数据cartMapper.deleteByExample(cartExample);return ResponseDTO.successByMsg(true,"下单成功");}
2.前台用户登录代码:
/*** 前台用户登录操作* @param userDTO* @param request* @return*/@Overridepublic ResponseDTO<Boolean> homeLogin(UserDTO userDTO, HttpServletRequest request) {if(userDTO == null) {return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);}if(CommonUtil.isEmpty(userDTO.getUsername())) {return ResponseDTO.errorByMsg(CodeMsg.USERNAME_EMPTY);}if(CommonUtil.isEmpty(userDTO.getPassword())) {return ResponseDTO.errorByMsg(CodeMsg.PASSWORD_EMPTY);}UserExample userExample = new UserExample();userExample.createCriteria().andUsernameEqualTo(userDTO.getUsername()).andPasswordEqualTo(userDTO.getPassword());List<User> userList = userMapper.selectByExample(userExample);if(userList.size() == 0) {return ResponseDTO.errorByMsg(CodeMsg.USERNAME_PASSWORD_ERROR);}request.getSession().setAttribute(SessionConstant.HOME_SESSION_LOGIN_KEY, userList.get(0));return ResponseDTO.successByMsg(true, "登录成功!");}
3.保存商品信息代码:
/*** 保存商品信息* @param productDTO* @return*/@Overridepublic ResponseDTO<Boolean> save(ProductDTO productDTO) {if(productDTO == null) {return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);}// 进行统一表单验证CodeMsg validate = ValidateEntityUtil.validate(productDTO);if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {return ResponseDTO.errorByMsg(validate);}Product product = CopyUtil.copy(productDTO, Product.class);if(CommonUtil.isEmpty(product.getId())){// 添加操作product.setId(UuidUtil.getShortUuid());product.setCreateTime(new Date());if(productMapper.insertSelective(product) == 0){return ResponseDTO.errorByMsg(CodeMsg.PRODUCT_ADD_ERROR);}}else {// 修改操作if(productMapper.updateByPrimaryKeySelective(product) == 0){return ResponseDTO.errorByMsg(CodeMsg.PRODUCT_EDIT_ERROR);}}return ResponseDTO.success(true);}
相关文章:
SpringBoot百货超市商城系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBoot框架开发的百货超市系统。首先,这是一个很适合SpringBoot初学者学习的项目,代…...
【实践篇】推荐算法PaaS化探索与实践 | 京东云技术团队
作者:京东零售 崔宁 1. 背景说明 目前,推荐算法部支持了主站、企业业务、全渠道等20业务线的900推荐场景,通过梳理大促运营、各垂直业务线推荐场景的共性需求,对现有推荐算法能力进行沉淀和积累,并通过算法PaaS化打造…...
持续贡献开源力量,棱镜七彩加入openKylin
近日,棱镜七彩签署 openKylin 社区 CLA(Contributor License Agreement 贡献者许可协议),正式加入openKylin 开源社区。 棱镜七彩成立于2016年,是一家专注于开源安全、软件供应链安全的创新型科技企业。自成立以来&…...
Kafka的消费者如何管理偏移量?
在Kafka中,消费者可以通过管理和跟踪偏移量(offset)来确保消费者在消费消息时的准确性和可靠性。偏移量表示消费者在特定分区中已经消费的消息的位置。以下是几种常见的偏移量管理方式: 手动提交偏移量:消费者可以通过…...
IntelliJ IDEA流行的构建工具——Gradle
IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 如…...
nacos源码打包及相关配置
nacos 本地下载后,需要 install 下: mvn clean install -Dmaven.test.skiptrue -Dcheckstyle.skiptrue -Dpmd.skiptrue -Drat.skiptruenacos源码修改后,重新打包生成压缩包命令:在 distribution 目录中运行: mvn -Pr…...
【机器学习】Multiple Variable Linear Regression
Multiple Variable Linear Regression 1、问题描述1.1 包含样例的X矩阵1.2 参数向量 w, b 2、多变量的模型预测2.1 逐元素进行预测2.2 向量点积进行预测 3、多变量线性回归模型计算损失4、多变量线性回归模型梯度下降4.1 计算梯度4.2梯度下降 首先,导入所需的库 im…...
自己创建的类,其他类中使用错误
说明:自己创建的类,在其他类中创建,报下面的错误(Cannot resolve sysmbol ‘Redishandler’); 解决:看下是不是漏掉了包名 加上包名,问题解决;...
Packet Tracer – 使用 TFTP 服务器升级思科 IOS 映像。
Packet Tracer – 使用 TFTP 服务器升级思科 IOS 映像。 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 F0/0 192.168.2.1 255.255.255.0 不适用 R2 G0/0 192.168.2.2 255.255.255.0 不适用 S1 VLAN 1 192.168.2.3 255.255.255.0 192.168.2.1 TFTP …...
并查集基础
一、概念及其介绍 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。 并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根…...
C# 循环等知识点
《1》程序:事先写好的指令(代码) using 准备工具 namespace 模块名称 { class 子模块{ static void main()//具体事项 { 代码 } } } 《2》变量:内存里的一块空间,用来存储数据常用的有小数,整数,…...
1.1.2 SpringCloud 版本问题
目录 版本标识 版本类型 查看对应版本 版本兼容的权威——官网: 具体的版本匹配支持信息可以查看 总结 在将Spring Cloud集成到Spring Boot项目中时,确保选择正确的Spring Cloud版本和兼容性是非常重要的。由于Spring Cloud存在多个版本,因此…...
Android AIDL 使用
工程目录图 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 代码:LearnAIDL代码:AIDLClient. 参考文献 安卓开发学习之AIDL的使用android进阶-AIDL的基本使用Android AIDL 使用使用 AIDL …...
MongoDB——命令详解
db.fruit.remove({name:apple})//删除a为apple的记录db.fruit.remove({})//删除所有的记录db.fruit.remove()//报错 MongoDB使用及命令大全(一)_mongodb 删除命令_言不及行yyds的博客-CSDN博客...
机器学习深度学习——多层感知机的简洁实现
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——多层感知机的从零开始实现 📚订阅专栏:机器学习&&深度学习 希望文章对你…...
笙默考试管理系统-MyExamTest(21)
笙默考试管理系统-MyExamTest(21) 目录 一、 笙默考试管理系统-MyExamTest 二、 笙默考试管理系统-MyExamTest 三、 笙默考试管理系统-MyExamTest 四、 笙默考试管理系统-MyExamTest 五、 笙默考试管理系统-MyExamTest 六、 笙默考试管理系统…...
Redis高可用之主从复制、哨兵、cluster集群
一、Redis主从复制1.1 Redis主从复制的概念1.2 Redis主从复制作用1.3 主从复制流程1.4 搭建 Redis 主从复制 二、Redis哨兵模式2.1 概述2.2 哨兵模式原理2.3 哨兵模式的作用2.4 哨兵结构2.5 故障转移机制2.6 主节点的选举2.7 搭建Redis 哨兵模式 三、Redis 群集模式3.1 概述3.2…...
【需求响应DR】一种新的需求响应机制DR-VCG研究(Python代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【Django学习】(十六)session_token认证过程与区别_响应定制
一、认识session与token 这里就直接引用别人的文章,不做过多说明 网络应用中session和token本质是一样的吗,有什么区别? - 知乎 二、token响应定制 在全局配置表中配置 DEFAULT_AUTHENTICATION_CLASSES: [# 指定jwt Token认证rest_framew…...
ai创作系统CHATGPT支持GPT4.0+支持ai绘画(MJ)+ai绘画(SD)集合几百种AI智能工具
生成的AI绘画 非常的奈斯 包括GPT...
2026年AI论文写作工具实测排行,哪款真正适合写论文?
2026 年学术 AI 论文工具已形成全流程、理工 / 社科、英文 / 中文、免费 / 付费的清晰分化。综合实测排行与场景适配,千笔AI 是中文全能首选,DeepSeek 学术版是理工开源首选,毕业之家是国内毕业专属首选。 一、2026 年实测排行 TOP5ÿ…...
OPD为何如此高效?中科大揭开参数动力学密码,后训练提速3倍
只跑到约 10% 训练进度,OPD 已能恢复约 80% 的最终推理性能,EffOPD 顺势把后训练提速到约 3 倍。虽然 LLMs 的推理能力依靠强化学习(RL)得到了大幅提升,但 RL 训练过程往往漫长、昂贵且充满试错;同时&#…...
工业设备数据采集太难?这款.NET8边缘网关,轻松搞定多协议对接
🌈前言如今工业数字化、智能化转型脚步越来越快,工厂现场各类 PLC、仪表、传感器设备型号繁杂,通信协议五花八门,设备数据采集难、协议对接繁琐、多设备统一管控麻烦,一直是很多制造企业、工控从业者头疼的实际问题。市…...
XHS-Downloader:小红书内容采集的技术架构与多模式部署方案
XHS-Downloader:小红书内容采集的技术架构与多模式部署方案 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接…...
税务平台国密登录四段式加密链路实战解析
1. 这不是“加个密”那么简单:税务平台登录背后的真实战场你有没有试过,在某个政府类业务系统里点下“登录”按钮后,页面卡住两秒,控制台突然刷出一长串base64编码的密文?再刷新一次,密文全变了;…...
你的仿真传感器数据准吗?Gazebo中激光雷达与深度相机的噪声模型配置与Rviz可视化调参实战
高保真机器人仿真:Gazebo传感器噪声模型与Rviz可视化调参全指南 在机器人算法开发中,仿真环境的真实性直接决定了算法测试的有效性。许多SLAM和导航算法在仿真环境中表现优异,一旦部署到真实机器人上却出现各种问题,这往往源于仿真…...
通过用量看板分析不同模型在taotoken上的实际token消耗差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过用量看板分析不同模型在taotoken上的实际token消耗差异 效果展示类,分享一名开发者在完成一个多轮对话项目后&…...
嵌入式与复杂系统安全开发实战:从威胁建模到安全编码的十大核心实践
1. 项目概述:为什么安全开发不再是“可选项”?干了十几年软件开发,从早期的桌面应用到后来的Web服务,再到近几年深度参与的嵌入式系统,我最大的感触就是:安全这件事,已经从“锦上添花”变成了“…...
S7-1200通讯选型指南:RS485、Profinet还是开放式TCP?看完这篇不再纠结
S7-1200通讯选型指南:RS485、Profinet还是开放式TCP?看完这篇不再纠结 在工业自动化项目中,PLC通讯方案的选择往往让工程师们陷入两难——既要考虑当下设备的兼容性,又要为未来升级预留空间。作为西门子S7-1200系列PLC的用户&…...
Win11 右键菜单缺少“新建文本文档“win11 某些软件中文乱码
Win11 右键菜单缺少“新建文本文档“Win11 右键菜单缺少"新建文本文档"是常见系统配置问题,主要通过注册表修复或记事本应用重装即可解决。核心解决方法(win11 亲测可行)注册表修复(最常用)按Wi…...
