当前位置: 首页 > news >正文

基于springboot+vue的食疗系统

基于springboot+vue的食疗系统

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

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


一、项目背景介绍:

现在所处的社会以《和平与发展》作为一个时代发展的主题,科学技术作为第一生产力,在如今经济飞速发展的当下,人们的生活质量水平不断的提高了,不在以“吃饱穿暖”为主体了,越来越注重生活质量与精神文化的提升,伴随着生活节奏的加快,愈来愈多的人开始关注健康生活,提升自己的身体健康。
虽然愈来愈多的人开始关注自己的健康,也去改善自己的身体,但是根据2020年一项数据调查显示,在我国中亚健康的人数占比依旧是高达了国内人数的76%,而真正意义上健康的人数所占比例则不足3%。通过数据来看人群健康状况并不是很乐观,而且需要一个很大的改善。
在我们的身体中,拿体重这一项我们日常生活中比较在意的进行数据对比,我们可以发现以下重要信息:由《中国居民营养与慢性病状况报告(2020年)》中所展示出的新数据,我们就可以得出以下的结论,目前而言我国的成人中已经有超过1/2的人超重或肥胖,在成年居民(≥18岁)中超重率为34.3%、肥胖率为16.4%。此次也是全国性调查报告中首次出现超过1/2这样一个数字。同时在6-17岁儿童和青少年中有1/5(19%)和6岁以下儿童1/10(10.4%)都存在超重或肥胖。如果用人口数量来表示数据库,则通过人口数来计算,全国已经有6亿人超重和肥胖,这个数字在全球是第一位。很显然肥胖这一问题值得引起我们的重视。引起肥胖的原因有很多,其中最常见最直接的原因是跟我们吃的食物有关。目前人们对食物的要求越来越高,虽然肥胖等体重问题对于我们来说似乎并没有其他如:心血管、糖尿病等疾病那么严重,但是肥胖会引发诸如心血管疾病、糖尿病、脂肪肝等一系列疾病,而且是慢慢的改变身体机能,一般而言是很难察觉。而对于肥胖这一问题主要可以通过锻炼、控制饮食、调整作息等方式来改善。食疗这一理论则是通过饮食来调节我们的机能,所以我认为食疗系统的开发与设计是有利于健康和发展的、是具有需求的一个课题研究。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
    Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
  3. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  4. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  5. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
  6. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:‘管理员表’(admin)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名
head_imgvarcharNULL头像
pass_wordvarcharNULL密码
nick_namevarcharNULL昵称

2:‘食材表’(foods)

字段名类型默认值列注释
idbigintNULL主键ID
food_namevarcharNULL食材名称
food_typebigintNULL食材分类
food_funtextNULL主治功能
tabootextNULL禁忌食物
big_imgvarcharNULL封面图片
foods_imgstextNULL轮播图数组

3:‘食材分类’(goods_type)

字段名类型默认值列注释
idbigintNULL主键ID
type_namevarcharNULL类型名称

4:‘留言管理’(medical_records)

字段名类型默认值列注释
idbigintNULL主键ID
user_idbigintNULL用户ID
performancetextNULL常规表现
recommendedvarcharNULL推荐方案
mailvarcharNULL邮箱

5:‘体质分类表’(physical_type)

字段名类型默认值列注释
idbigintNULL主键ID
physical_namevarcharNULL体质分类名称

6:‘体质表’(physicals)

字段名类型默认值列注释
idbigintNULL主键ID
physicals_namevarcharNULL体质名称
type_idbigintNULL所属类型
performancetextNULL常规表现
featuretextNULL形体特征
tendencystextNULL发病倾向
abilitytextNULL适应能力
health_keytextNULL养生关键
tabootextNULL食物性宜忌
big_imgvarcharNULL介绍图片

7:‘食谱表’(recipe)

字段名类型默认值列注释
idbigintNULL主键ID
recipe_namevarcharNULL食谱名称
recipe_typebigintNULL食谱分类
recipe_contenttextNULL食谱搭配
attend_funtextNULL主治疾病
tabootextNULL饮食禁忌
big_imgvarcharNULL封面图片

8:‘食谱分类表’(recipe_type)

字段名类型默认值列注释
idbigintNULL主键ID
recipe_typevarcharNULL食谱类别

9:‘用户表’(users)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名
sexintNULL
pass_wordvarcharNULL密码
namevarcharNULL姓名
ageintNULL年龄
adaptvarcharNULL适应能力
historyvarcharNULL既往史
now_medicalvarcharNULL现病史
allergyvarcharNULL过敏史
create_timedatetimeNULL创建时间

五、功能模块:

  1. 用户登录模块:首先用户需要进行登录操作来进入系统后才能再进行后续的一些功能体验。在用户系统界面可以点击右上角的登录按钮跳转登录界面输入正确的相关用户信息便可等级食疗系统进行功能体验,如果该用户没有注册,则可以点击注册按钮进行用户信息注册。在登录这一重要的模块中,系统会将用户输入的信息与系统数据库进行检查,MySQL数据库会运行SQL语句并将信与已存储在数据库中的数据进行检索,确保系统安全和稳定。

    用户登录模块

  2. 用户首页模块:在用户登录步骤完成之后并且成功进入食疗系统,食疗系统会展示首页信息,同时用户可以根据自己的需求进行食材、食谱、体质等功能体验。用户首先重要的是需要把自己的体质信息进行记录,这样食疗系统可以根据不同的体质情况进行数据处理。用户可以点击首页的体质按钮进入体质信息模块。

    用户首页模块

  3. 用户体质信息模块:在此食疗系统中,用户的体质信息是系统中重要的一个项目,用户可以在首页点击体质按钮进入体质页面把用户自己的一些体质相关信息对应食疗系统的提示进行输入,让食疗系统存储用户的体质信。体质信息中一些如:所属分类、形体特征、发病趋势等可以直观表示用户当前身体状况,让用户可以直接了解自己的身体健康情况。而在体质信息中的养生关键和食物性宜忌则可以为用户提供体质改善的建议,让用户能够提高自己的身体质量。在体质信息这一模块中,用户可以简单易读的直观了解到用户的体质信息,此页面可以让用户可以快速上手,提高用户使用体验。

    用户体质信息模块

  4. 食材信息模块:在食疗系统中用户可以在首页点击食材按钮跳转对应的食材信息模块,在此模块中用户可以直观感受到相应食材的作用、所属分类、主治功能、禁忌情况。

    食材信息模块

  5. 食谱信息模块:在食疗系统中用户可以在首页点击食谱按钮跳转对应的食材信息模块,在此模块中用户可以直观感受到相应食材的作用、所属分类、食谱搭配、主治功能、禁忌情况。

    食谱信息模块

六、代码示例:

用户登录模块
@RequestMapping(value = "/registerSave")public ResponseEntity<String> mineSave(Model model,HttpServletRequest request,Long id,String username,String password,String customerName,String sex,String address,String mobile) throws Exception{int result = 0;String sql="insert into t_customer(username,password,customerName,sex,address,mobile) values(?,?,?,?,?,?)";result = db.update(sql, new Object[]{username,password,customerName,sex,address,mobile});sql="select * from t_customer order by id desc limit 1";List<Map> list = db.queryForList(sql);request.getSession().setMaxInactiveInterval(60*60*24);request.getSession().setAttribute("customerBean", list.get(0));return renderData(true,"操作成功",null);}
用户首页模块
public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String username,String password) throws Exception {String sql="select * from t_customer where username=?";List<Map> list = db.queryForList(sql, new Object[]{username});String result="1";if(list!=null&&list.size()>0){Map map = list.get(0);if(StringHelper.get(map, "password").equals(password)){request.getSession().setMaxInactiveInterval(60*60*24);request.getSession().setAttribute("customerBean", map);result="1";}else{result="0";}}else{result="0";}return rende
用户体质信息模块
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{return AjaxResult.success(tGrugsService.selectTGrugsById(id));
}
食材信息模块
@RequestMapping(value = "/myOrder")public String myOrder(Model model, HttpServletRequest request)throws Exception {String sql = "select a.*,(select max(customerName) from t_customer b where a.customerId=b.id) customerName  from t_order a where 1=1 ";if (1 == 1) {sql += "and customerId=" + getCustomer(request).get("id") + " ";}sql += " order by id desc";List list = db.queryForList(sql);request.setAttribute("orderList", list);return "/front/myOrder";}
食谱信息模块
@GetMapping("/list")
public TableDataInfo list(SysNotice notice)
{startPage();List<SysNotice> list = noticeService.selectNoticeList(notice);return getDataTable(list);
}

七、论文参考:

论文参考···论文参考图

八、项目总结:

通过这段时间的设计和开发,食疗系统是完成了,在此我非常感谢老师的指导和同学的帮助,让我可以在在这几个月把自己的食疗系统开发完成。在这份文档中展示了食疗系统的部分关键功能模块和一些食疗系统在设计与开发时候的内容。此食疗系统的用户系统为用户提供了用户所属账号注册以及登录功能、本系统所包含的食材信息、食谱信息、以及用户体质记录和对应体质的食谱推荐,为用户的身体健康提供帮助。在本食疗系统的管理系统则为管理员提供了用户的体制分类管理、食谱分类管理、食材管理、食谱信息管理、食品分类管理、体质信息管理、留言管理、用户信息管理这些功能。这些功能为用户和管理员对食疗系统的功能体验和运作提供了有效作用。
在设计和开发食疗系统时,因为本人是首次个人制作此类系统项目,在很多方面还是存在不足之处。在系统开发时,系统开发编码的情况不容乐观,很多编码逻辑还是存在很大的问题,编写的代码存在逻辑混乱,这对于系统的开发是非常严重的,在以后我会改善自己的编码思维,确保编码逻辑顺通。对于用户系统的界面设计之初还是缺乏简洁的美观思维,没有去深入考虑用户的观念,系统的界面不够美观,让系统界面的美观并不讨喜,系统界面是直接与用户进行交互的,应该设计美观,让用户喜欢,提高用户的使用体验。
完成此次食疗系统后在,让我知道了想要开发一个好的系统、一个有用户粘性的系统并不简单,做好系统开发之初的需求分析、一个符合用户审美的系统设计、一个安全稳定的数据库等这些都是不能粗制滥造的。我想通过这次食疗系统的设计与开发可以让我积累更多的专业知识,让自己的实践能力更强。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

相关文章:

基于springboot+vue的食疗系统

基于springbootvue的食疗系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&…...

sklearn学习-朴素贝叶斯

文章目录一、概述1、真正的概率分类器2、sklearn中的朴素贝叶斯二、不同分布下的贝叶斯1、高斯朴素贝叶斯GaussianNB2、探索贝叶斯&#xff1a;高斯朴素贝叶斯擅长的数据集3、探索贝叶斯&#xff1a;高斯朴素贝叶斯的拟合效果与运算速度总结一、概述 1、真正的概率分类器 算法…...

分享112个HTML艺术时尚模板,总有一款适合您

分享112个HTML艺术时尚模板&#xff0c;总有一款适合您 112个HTML艺术时尚模板下载链接&#xff1a;https://pan.baidu.com/s/1D3-mfPOud-f3vy9yLl-bmw?pwdfph2 提取码&#xff1a;fph2 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 时尚平面模特网站模板 潮…...

用GDB远程调试运行于QEMU的程序

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 测试环境 本文使用 Ubuntu 16.04.4 LTS QEMU 环境进行调试。 3. 用 GDB 调试 QEMU 内程序 3.1 编写用来调试的程序 我们用 ARM32 来进行调试…...

20 堆排序

文章目录1 堆排序的概念2 堆排序基本思想3 堆排序步骤图解说明4 堆排序的代码实现1 堆排序的概念 1) 堆排序是利用堆这种数据结构而设计的一种排序算法&#xff0c;堆排序是一种选择排序&#xff0c;它的最坏&#xff0c;最好&#xff0c;平均时间复杂度均为 O(nlogn)&#xf…...

2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享 很多时候&#xff0c;我们都想将一些文件或文本传送给别人&#xff0c;或者跨端传递一些信息&#xff0c;但是我们又不…...

分片策略(二)

分片策略 基本概念 分片键 用于分片的字段&#xff0c;是将数据库或表拆分的字段&#xff0c;比如&#xff0c;我可以使用user_id作为分片键将用户数据分到不同的表中&#xff0c;这里的user_id就是分片键&#xff0c;除了这种单字段分片&#xff0c;ShardingSphere还支持多…...

Qt之调色板类QPalette的使用

文章目录QPalette调色板类前言代码知识点讲解QPalette调色板类 前言 Qt提供的调色板类QPalette专门用于管理部件的外观显示&#xff0c;相当于部件或对话框的调色板&#xff0c;管理他们所有的颜色信息。每个部件都包含一个QPalette对象&#xff0c;在显示时&#xff0c;按照…...

Kotlin 32. Kotlin 多语言支持

Kotlin 多语言支持 对于 Kotlin 来说&#xff0c;当我们新建一个项目时&#xff0c;会默认在 values/ 文件夹下&#xff0c;生成一个 strings.xml 文件。比如说&#xff0c; <resources><string name"app_name">exampleNewProject</string> <…...

【Flutter入门到进阶】Dart进阶篇---DartVM单线程设计原理

1 虚拟机的指令执行设计 1.1 虚拟机的分类 基于栈的虚拟机&#xff0c;比如JVM虚拟机 基于寄存器的虚拟机&#xff0c;比如Dalvik虚拟机 1.2 虚拟机的概念 首先问一个基本的问题&#xff0c;作为一个虚拟机&#xff0c;它最基本的要实现哪些功能&#xff1f; 他应该能够模拟…...

Dem和NvM(NVRAM Manager)的交集

NVRAM&#xff08;NvM&#xff09;提供了在NVRAM中存储数据Block的机制。 NVRAM Block&#xff08;最大大小取决于配置&#xff09;被分配给Dem&#xff0c;并由Dem实现事件状态信息和相关数据的永久存储&#xff08;例如通电复位&#xff09;。 ECU 状态管理器&#xff08;Ec…...

AI神经网络CNN/RNN/DNN/SNN的区别对比

@版权声明: 本文由 ChatGpt 创作; BiliBili: https://www.bilibili.com/video/BV17D4y1P7pM/?share_source=copy_web&vd_source=6d217e0ff6387a749dc570aba51d36fd 引言 随着人工智能技术的发展,神经网络作为人工智能的核心技术之一,被广泛应用于图像识别、语音识别、…...

【JavaWeb】一文学会JPA

✅✅作者主页&#xff1a;&#x1f517;孙不坚1208的博客 &#x1f525;&#x1f525;精选专栏&#xff1a;&#x1f517;JavaWeb从入门到精通&#xff08;持续更新中&#xff09; &#x1f4cb;&#x1f4cb; 本文摘要&#xff1a;本篇文章主要介绍JPA的概念、注解实现ORM规范…...

【安卓逆向】APK修改与反编译回编译

【安卓逆向】反编译修改APK回编译使用工具流程步骤Apktool相关安装与使用常用命令备查APK签名命令备查实战练习反编译查看修改的地方使用Apktool反编译得到产物文件夹并进行修改回编APK实用场景在日常开发我们可能需要替换某些资源或者修改某些代码&#xff0c;但是我们没有源码…...

【计组笔记04】计算机组成原理之多模块存储器、Cache高速缓存存储器、Cache地址映射

这篇文章,主要介绍计算机组成原理之多模块存储器、Cache高速缓存存储器、Cache地址映射。 目录 一、双口RAM和多模块存储器 1.1、存取周期 1.2、双口RAM 1.3、多模块存储器...

英语基础-状语的应用

1. 非谓语动词作状语 1. 试着翻译下列句子 当他是一个小孩子的时候&#xff0c;他很喜欢玩电脑游戏。 When he was a child, he liked playing computer games. 如果他通过考试&#xff0c;他妈妈就会给他买一台新电脑。 If he passes the examination, his mother will b…...

发表论文需要注意的两点(建议收藏)

在学习人工智能的过程中&#xff0c;论文有着重要的作用&#xff0c;无论是深入学术科研&#xff0c;还是毕业找工作&#xff0c;都离不开发表论文这一步骤&#xff0c;所以今天就和大家分享一些关于论文发表的经验&#xff0c;希望对大家有所帮助。 为什么要早点发表论文&…...

ISTQB-TM-大纲

1. 测试过程 1.1 简介 在 ISTQB 软件测试基础级认证大纲中已描述了基本的测试过程包括以下活动&#xff1a; 计划和控制分析和设计实施和执行评估出口准则和报告测试结束活动 基础级大纲认同这些活动虽然有逻辑顺序&#xff0c;但过程中的某些活动可能重叠&#xff0c;或并行…...

Java SPI 机制详解

在面向对象的设计原则中&#xff0c;一般推荐模块之间基于接口编程&#xff0c;通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类&#xff0c;就违反了开闭原则。如果需要替换一种实现&#xff0c;就需要修改代码。 为了实现在模块装…...

腾讯前端经典react面试题(附答案)

React 性能优化在哪个生命周期&#xff1f;它优化的原理是什么&#xff1f; react的父级组件的render函数重新渲染会引起子组件的render方法的重新渲染。但是&#xff0c;有的时候子组件的接受父组件的数据没有变动。子组件render的执行会影响性能&#xff0c;这时就可以使用s…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...