基于Springboot的前后端不分离的咖啡商城

发布时间:2024年01月09日

?全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战?

🍅文末获取项目下载方式🍅


一、项目背景介绍:

随着互联网的普及和发展,电商行业迅速崛起,成为了商业领域中的一股强大力量。咖啡作为一种受欢迎的饮品,其市场需求也在逐年增长。传统的咖啡店业务面临着新的挑战,需要更好的适应数字化、在线化的趋势。

在这个背景下,采用基于Spring Boot的前后端不分离的架构,可以为咖啡商城的开发和运营提供更加灵活、高效的解决方案。传统的前后端分离架构中,前端和后端是独立开发、独立部署的,而在不分离的架构中,前端和后端通过一体化的开发方式,更加紧密地协同工作。

这种架构的优势在于:

开发效率提升: 前后端一体化的开发方式使得开发团队更容易协同工作,减少了沟通成本,提高了开发效率。

部署简化: 不分离的架构简化了部署流程,整个系统可以更容易地进行部署和维护。

适应小团队: 对于小型团队而言,不分离的架构可能更容易管理,因为整个系统的开发和维护在一个团队中进行。

更好的用户体验: 前后端一体化有助于实现更加灵活、动态的用户界面,提供更好的用户体验。

基于Spring Boot的咖啡商城将充分利用这一架构的优势,通过整合订单管理、用户管理、库存管理等功能,提供一个全面、高效的在线购物平台。同时,通过采用Spring Boot框架,能够提供高度的可扩展性和稳定性,以应对未来业务的不断扩张。

该研究旨在通过构建一个前后端不分离的咖啡商城,探索这一架构对于电商行业的适用性和效果。通过对比不同架构下商城的性能、用户体验等指标,提供对于前后端不分离架构在咖啡商城领域的实际应用的深入理解。

二、项目技术简介:

  1. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

  2. Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

  3. Thymeleaf:thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。

  4. Bootstrap:Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。 国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。

  5. Druid: Druid 是一个高效的数据查询系统,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到 Druid 后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入 Druid,外部系统就可以对该事实进行查询。

  6. SpringMVC: Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。

  7. HTML、CSS、JavaScript、JQuery:用于设计网页的内容和样式,作为开发 Web 页面的脚本语言,为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:‘收货地址’(address)

字段名类型默认值列注释
idintNULL主键ID
user_idintNULL用户ID
namevarcharNULL姓名
addressvarcharNULL收货地址
phonevarcharNULL手机号码
is_defaultintNULL是否默认【1:是】【0:否】

2:‘购物车’(cart)

字段名类型默认值列注释
idintNULL主键ID
user_idintNULL用户ID
commodity_idintNULL商品ID
countintNULL数量
add_timedatetimeNULL加入购物车时间

3:‘归类’(classify)

字段名类型默认值列注释
idintNULL主键ID
namevarcharNULL名称
create_timedatetimeNULL创建时间

4:‘收藏表’(collection)

字段名类型默认值列注释
idintNULL主键ID
user_idintNULL用户ID
commodity_idintNULL商品ID
add_timedatetimeNULL收藏时间

5:‘商品表’(commodity)

字段名类型默认值列注释
idintNULL主键ID
namevarcharNULL商品名称
infolongtextNULL商品简介
descriptionlongtextNULL商品描述
colorvarcharNULL颜色
materialvarcharNULL原材料
originvarcharNULL产地
classify_idintNULL商品分类ID
original_pricedecimalNULL原价
now_pricedecimalNULL现价
inventoryintNULL库存
publish_timedatetimeNULL上架时间
statusintNULL状态【1:上架】【0:下架】
imgvarcharNULL商品图片地址
sale_countintNULL销量

6:‘商品评价表’(commodity_comment)

字段名类型默认值列注释
idintNULL主键ID
user_idintNULL用户ID
commodity_idintNULL商品ID
starsintNULL评星数【1-5】
commentvarcharNULL评价
comment_timedatetimeNULL评价时间
reply_idintNULL回复评论的ID

7:‘订单表’(order)

字段名类型默认值列注释
idintNULL主键ID
order_numbervarcharNULL订单号
user_idintNULL用户ID
commodity_idintNULL商品ID
contentlongtextNULL订单记录
courier_numbervarcharNULL快递单号
courier_namevarcharNULL快递公司
create_timedatetimeNULL创建时间
pay_timedatetimeNULL付款时间
sipping_timedatetimeNULL发货时间
success_timedatetimeNULL成交时间
statusintNULL订单状态【-1:取消】【0:等待发货】【1:已发货】【2:已完成】
address_idintNULL地址ID

8:‘用户表’(user)

字段名类型默认值列注释
idintNULL主键ID
namevarcharNULL用户名
passwordvarcharNULL密码
emailvarcharNULL邮箱地址
imgvarcharNULL头像地址
infovarcharNULL
register_timedatetimeNULL注册时间
roleintNULL个人说明
update_timedatetimeNULL最新更新

五、功能模块:

系统注册与登录:填写用户信息进行账号注册、使用邮箱密码进行登录、忘记密码(使用邮件提醒)

image-20240105102926077

**系统主页与菜单:**浏览系统主页、商品详情、商品搜索、分类查看、查看优惠折扣

**个人资料与地址管理:**修改个人资料、修改登录密码、维护个人的收获地址,可设置多个地址,并设置其中一个为默认收获地址

image-20240105103233512

image-20240105103251552

商品列表与快速查看:

image-20240105103331763

image-20240105103425865

商品详情:

image-20240105103451739

image-20240105103514256

商品收藏与购物车:

image-20240105103542281

订单管理与商品评价:

image-20240105103636736

image-20240105103716427

用户管理:

商品分类与商品列表:

image-20240103221241645

发布商品:

订单列表与订单发货:

评价管理:

六、代码示例:

    /**
     * 添加收货地址
     */
    @PostMapping("/addAddress")
    public ResponseResult addAddress(Address address) {
        address.setUserId(loginUser.getId());
        address.setIsDefault(0);
        if (addressService.insert(address)) {
            result.setCode(200);
            result.setMessage("添加地址成功");
        } else {
            result.setCode(500);
            result.setMessage("服务器出错");
        }
        return result;
    }

    /**
     * 删除地址
     */
    @PostMapping("/deleteAddress")
    public ResponseResult deleteAddress(Integer id) {
        // 删除地址
        if (addressService.deleteById(id)) {
            result.setCode(200);
            result.setMessage("删除地址成功");
        } else {
            result.setCode(500);
            result.setMessage("服务器出错");
        }
        return result;
    }

    /**
     * 更新地址
     */
    @PostMapping("/updateAddress")
    public ResponseResult updateAddress(Integer id) {
        Address param = Address.builder()
                .userId(loginUser.getId())
                .build();
        // 获取当前登陆用户的所有地址
        List<Address> addresses = addressService.listAddresss(param);
        addresses.forEach(address -> {
            if (!address.getId().equals(id)) {
                // 将其他地址设为非默认
                address.setIsDefault(0);
            } else {
                address.setIsDefault((address.getIsDefault() + 1) % 2);
            }
            addressService.update(address);
        });
        result.setCode(200);
        result.setMessage("更新成功");
        return result;
    }

七、项目结构:

  • src:源码目录
  • src/main/java:源码主体目录
  • src/main/java/xxx/component:常用组件存放地址,比如登录拦截器、OSS 客户端、AIGC 客户端等【组件】
  • src/main/java/xxx/controller:控制器类存放地址【控制层】
  • src/main/java/xxx/entity:实体类存放地址【模型】
  • src/main/java/xxx/dao:MyBatis 的映射接口存放地址,【数据访问层】
  • src/main/java/xxx/service:业务层接口存放地址【业务逻辑抽象层】
  • src/main/java/xxx/task:定时任务存放地址【任务】
  • src/resources:资源文件存放目录
  • src/main/resources/mybatis:MyBatis 相关文件存放位置【MyBatis】
  • src/main/resources/academic-report.sql:数据库脚本
  • src/main/resources/static:前端静态资源存放地址
  • src/main/resources/templates:前端页面存放地址
  • src/main/resources/application.yml:SpringBoot配置文件
  • pom.xml:Maven项目依赖管理文件

注意!如果想要部署本项目,你只需要修改一个文件:application.yml

八、项目总结:

开发基于Springboot的前后端不分离的咖啡商城是作为毕设作品进行设计的,这个毕设作品是我在校进行知识学习的一个毕业考核项目,也是检验我通过网络工具,图书工具等学习工具进行自学的能力水平,让我在根据程序开发的需求分析初步完成程序功能之外,还接触了程序的测试过程,了解程序测试的具体的过程,以及遇到问题怎么去寻找相应的解决办法等等,毕业作品的制作以及设计才是学校对我真正的考验。

在程序软件没能进行开发之前,我去了学校的图书馆借了有关数据库操作的书籍,在查看了sqlserver和mysql两种数据库的相关知识之后,我最后选择了我比较熟悉的mysql数据库。在编程语言的抉择上,由于自己之前接触过Java程序的开发,所以为了让我尽快在短时间内完成程序制作,我确定用Java编程语言进行程序编程。另外我从百度上下载了很多的有关信息增加,信息删除等操作的源代码,并通过不断调试以及完成配套的数据库的设计,开始完成程序的各个部分的功能。每当我粗心大意,致使我深陷程序开发困扰不能自拔之时,值得庆幸的是,我就会得到老师,还有我的寝室同学的耐心指导。

历经长达几个月的毕业作品制作,我凭借自己的知识技能,还有大家的指导帮助,能够在学校规定的时间段之内提交毕业作品。虽然已经算是完成了毕业作品,但是付出了这么多心血,还是想把这个作品做得更加完美一点。针对我的毕业作品学生信息管理系统,我觉得还有很多方面需要完善,第一就是界面上需要细微调整,比如色彩搭配有点违背广众的审美,需要细微调整,还有系统里面的字体大小也需要调大一点,太小的字体看起来有些费眼。然后在程序的功能上因为自己的入门开发水平的影响,所以目前只能做到这个境界,这个系统相比其他类似系统来说功能很简单,逻辑结构设计得也比较合理。

自己一个人完成程序的开发,我不仅亲自体验了程序的开发流程,体验到了程序开发的各种不易。这种体验也还加深了我对知识的尊重。学海无涯,知识不是大学短短四年就能学完的,在大学学到的知识在最终经历检验时,才会深深地明白自己的知识积累原来还很浅薄。所以今后不管身在何处,自己的学习心态一定要时刻体现出来,要深刻明白知识学到手里就是自己的。同时,自己也不必过多抱怨学到的知识没有用处,相信学到的知识总会有派上用处的那天。不要等到需要用时再去学习知识,那样就会导致自己错失很多本该属于自己的机遇。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

文章来源:https://blog.csdn.net/qq_40647372/article/details/135449004
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。