苍穹外卖项目日记(day04)

苍穹外卖|项目日记(day04)

前言: 今天主要是接口开发, 涉及的新东西不多, 需要注意的只有多表联查和修改的逻辑,
在这里插入图片描述

今日难点:

1.菜品的停起售状态设置

2.套餐的停起售状态设置

3.动态sql中的 useGeneratedKeys 与 keyProperty 两个参数

一. 菜品的停起售状态设置

​ 在菜品的停售中, 包含其菜品的套餐与需停售, 所以也就涉及到两张表的修改.

 /*** 菜品的停售与起售** @param id* @param status*/@Override@Transactionalpublic void setStatus(Integer status, Long id) {Dish dish = Dish.builder().status(status).id(id).build();dishMapper.update(dish);if(status == StatusConstant.DISABLE){// 如果是停售, 与菜品相关的套餐也要停售List<Long> dishid = new ArrayList<>();dishid.add(id);// 根据关联表获取需upadated的套餐List<Long> setmealid = setmealDishMapper.getSetmealIdsByDishIds(dishid);if(setmealid != null && setmealid.size() > 0) {setmealid.forEach(setmealId -> {// 根据id进行updateSetmeal setmeal = Setmeal.builder().id(setmealId).status(status).build();setmealMapper.update(setmeal);});}}}

二. 套餐的停起售状态设置

 /*** 套餐起售、停售* @param status* @param id*/@Override@Transactionalpublic void startOrStop(Integer status, Long id) {//起售套餐时,判断套餐内是否有停售菜品,有停售菜品提示"套餐内包含未启售菜品,无法启售"if(status == StatusConstant.ENABLE){//select a.* from dish a left join setmeal_dish b on a.id = b.dish_id where b.setmeal_id = ?List<Dish> dishList = dishMapper.getBySetmealId(id);if(dishList != null && dishList.size() > 0){dishList.forEach(dish -> {if(StatusConstant.DISABLE == dish.getStatus()){throw new SetmealEnableFailedException(MessageConstant.SETMEAL_ENABLE_FAILED);}});}}Setmeal setmeal = Setmeal.builder().id(id).status(status).build();setmealMapper.update(setmeal);

三. 动态sql的两个参数

一、参数含义

1. useGeneratedKeys="true"

  • 作用:启用数据库自动生成的主键获取功能
  • 默认值false(不自动获取生成的主键)
  • 适用数据库:支持自动生成主键的数据库(如 MySQL 的 AUTO_INCREMENT,Oracle 的序列等)

2. keyProperty="id"

  • 作用:指定将获取到的主键值设置到哪个 Java 对象属性中
  • 值格式:对应 Java 对象的属性名,支持嵌套属性(如 user.id

二.示例

1. 单条记录插入后获取主键

典型场景:插入一条新记录后,需要立即使用该记录的主键进行后续操作

// mapper.xml
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">INSERT INTO users(username, email) VALUES(#{username}, #{email})
</insert>

java代码示例:

// service层
User user = new User();
user.setUsername("张三");
user.setEmail("zhangsan@example.com");
userMapper.insertUser(user);
// 插入后,user.getId() 会自动被赋值为数据库生成的主键值
System.out.println("新用户ID:" + user.getId());
2.修改记录后获取主键

典型场景: 修改一条记录, 需要立即使用该记录的主键进行后续操作

// mapper.xml
<update id="update" useGeneratedKeys="true" keyProperty="id">update setmeal<set><if test="categoryId != null">category_id = #{categoryId},</if><if test="name != null and name != ''">name = #{name},</if><if test="price != null">price = #{price},</if><if test="status != null">status = #{status},</if><if test="description != null">description = #{description},</if><if test="image != null">image = #{image},</if></set>where id = #{id}</update>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88565.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React之旅-05 List Key

每个React的初学者&#xff0c;在调试程序时&#xff0c;都会遇到这样的警告&#xff1a;Warning: Each child in a list should have a unique "key" prop. 如下面的代码&#xff1a; const list [Learn React, Learn GraphQL];const ListWithoutKey () > (&l…

[特殊字符] 人工智能技术全景:从基础理论到前沿应用的深度解析

&#x1f680; 人工智能技术全景&#xff1a;从基础理论到前沿应用的深度解析 在这个AI驱动的时代&#xff0c;理解人工智能的核心技术和应用场景已成为技术人员的必备技能。本文将带你深入探索AI的发展脉络、核心技术差异以及在各行业的创新应用。 文章目录&#x1f680; 人工…

Go语言教程-环境搭建

前言 Go&#xff08;又称 Golang&#xff09;是由 Google 开发的一种 开源、静态类型、编译型 编程语言&#xff0c;于 2009 年正式发布。它旨在解决现代软件开发中的高并发、高性能和可维护性问题&#xff0c;尤其适合 云计算、微服务、分布式系统 等领域。 Go 语言国际官网…

windows指定某node及npm版本下载

下载并安装 nvm-windowshttps://github.com/coreybutler/nvm-windows/releases&#xff08;选择 nvm-setup.zip&#xff09;。打开命令提示符&#xff08;管理员权限&#xff09;&#xff0c;安装 Node.js v16.15.0&#xff1a; nvm install 16.15.0 nvm use 16.15.0 验证node版…

每天一个前端小知识 Day 28 - Web Workers / 多线程模型在前端中的应用实践

Web Workers / 多线程模型在前端中的应用实践&#x1f9e0; 一、为什么前端需要多线程&#xff1f; 单线程 JS 的瓶颈&#xff1a;浏览器主线程不仅负责执行 JS&#xff0c;还要负责&#xff1a; UI 渲染&#xff08;DOM/CSS&#xff09;用户事件处理&#xff08;点击、输入&am…

python:ImportError: cannot import name ‘ParameterSource‘ from ‘click.core‘

浏览器访问网站抛错&#xff1a;ImportError: cannot import name ParameterSource from click.core (E:\environment\python\Lib\site-packages\click\core.py)问题分析&#xff1a;1. click 版本问题ParameterSource 可能是在某个特定版本的 click 库中引入的&#xff0c;而你…

flink 去重

LOCALTIMESTAMP as time_stamp ts as case when time is null then CURRENT_TIMESTAMP else TO_TIMESTAMP_LTZ(time, 0) end , watermark for ts as ts - interval ‘60’ second PARTITION BY 的都有回撤流 group by 的没有回撤流 因为算的是指标 开窗又慢 SELECT * FROM (…

【音视频】TS协议解析

参考博客&#xff1a;https://blog.csdn.net/rell336/article/details/38109621?utm_mediumdistribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_sourcedistribute.pc_relevant_t0.none-task-blog-BlogCommendFromMac…

uniapp 日期组件可选择年月

month-picker 月份选择器组件 组件介绍 month-picker 是一个用于选择年月的自定义组件&#xff0c;基于 uni-app 开发&#xff0c;提供了简洁的月份选择功能。 解决弹框底部出现底部页面区域 safe-area属性设为true时&#xff0c;即可解决这个问题效果如图功能特点 支持选择年份…

从真人到数字分身:3D人脸扫描设备在高校数字人建模教学中的应用

在影视、动漫、游戏等数字创意产业蓬勃发展的当下&#xff0c;超写实虚拟数字人凭借其高度逼真的形象&#xff0c;成为行业关注的焦点。无论是影视特效中栩栩如生的角色&#xff0c;还是游戏里精致的NPC&#xff0c;超写实虚拟数字人的制作都离不开先进的技术支撑。而3D人脸扫描…

你以为大数据只是存?其实真正的“宝藏”藏在这招里——数据挖掘!

你以为大数据只是存&#xff1f;其实真正的“宝藏”藏在这招里——数据挖掘&#xff01; 曾经我也天真地以为&#xff0c;搞大数据就是会写几个SQL、部署个Hadoop集群&#xff0c;结果真到项目现场&#xff0c;甲方爸爸一句&#xff1a;“给我挖掘一下用户的购买意图”&#xf…

LeetCode经典题解:128、最长连续序列

“最长连续序列”是一道极具代表性的数组处理问题&#xff0c; 本文将带你从直观思路出发&#xff0c;逐步推导出最优解法&#xff0c;并通过场景化记忆技巧掌握核心逻辑。 一、题目描述 题目&#xff1a;给定一个未排序的整数数组 nums&#xff0c;找出数字连续的最长序列&…

电力分析仪的“双语对话”:CCLinkIE与Modbus TCP的无缝连接

在工业自动化领域&#xff0c;协议兼容性问题如同“方言壁垒”&#xff0c;让不同品牌、不同系统的设备难以高效协同。对于电力分析仪这类关键设备而言&#xff0c;如何打破CCLinkIE与Modbus TCP协议的“语言障碍”&#xff0c;已成为工程师优化系统集成的核心课题。 为何需要协…

暑假复习篇之文本编译器

一、知识点补充【在此次示例代码上显示的关键用法】知识点1、JMenuBar&#xff1a;菜单栏的容器&#xff0c;通常添加到JFrame的顶部。关键用法&#xff1a;add&#xff1a; 添加菜单到菜单栏2、JMenu&#xff1a;菜单条目&#xff08;“文件” “编辑” 等&#xff09;&#x…

Linux自动化构建工具(一)

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录Li…

目标检测流程图绘制

目标检测流程图绘制作为一个长期科研的苦命人&#xff0c;我一般采用Processon。 一、目标检测流程图绘制的 “量身定制” 体验 Processon 的绘图元素库对目标检测领域极度友好&#xff0c;从基础模块到复杂结构都能精准匹配&#xff1a;   核心组件一键调用&#xff1a;在右…

GitHub 趋势日报 (2025年07月09日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图970genai-toolbox780WebAgent650rustfs451prompt-eng-interactive-tutorial246ai-a…

多云环境下的成本管理挑战与对策 ——资源碎片化治理与华为CloudMatrix破局之道

一、危机&#xff1a;多云成本失控已成企业“隐形杀手”成本超支概率激增据Gartner 2024报告&#xff0c;采用多云策略的企业成本超支概率比单云企业高47%&#xff0c;主因资源碎片化导致的闲置浪费和管控失效。触目惊心的数据&#xff1a;73%企业云成本占营收超20%&#xff0c…

Linux的基础I/O

目录 1、理解“文件” 1.1 狭义理解 1.2 广义理解 1.3 文件操作的归类认知 1.4 系统角度 2、回顾C文件接口 2.1 文件的打开与关闭 2.2 文件的读写函数 2.3 stdin & stdout & stderr 3、系统文件I/O 3.1 一种传标志位的方式 3.2 文件的系统调用接口 3.2.1 o…

广告匹配策略的智能化之路:人工智能大模型的方法和步骤

摘要 广告匹配策略是指根据用户的需求和偏好&#xff0c;向用户推荐最合适的广告的方法。广告匹配策略的优化是数字化营销的核心问题之一&#xff0c;也是提升广告效果和收益的关键因素。本文介绍了如何利用人工智能大模型&#xff0c;从数据分析、广告推荐、策略优化、效果评…