SQL主键回显

目录

[一 业务场景](#一 业务场景)

[二 如何使用](#二 如何使用)


一 业务场景

当我们在一个业务功能下操作多张表时,当另一个表数据需要上一个表刚插入的数据的ID时,就需要使用到主键回显。

比如我现在有两张表,一张是菜品表,一张是口味表。而我一个菜品应该会有多个口味,所以当我们在实现菜品插入功能的时候,我们还需要在插入完成菜品后,再把该菜品的口味也插入到对应的口味表中,而口味表中当然就需要所属菜品的id了。

那么现在的问题就是,在菜品还没有插入之前,我是不知道菜品id的,因为菜品id是在菜品插入之后生成的id,所以我就需要在菜品插入完成后,再获得这个菜品生成的id赋值给口味对象,那么就需要使用到主键回显功能。

二 如何使用

其实使用起来很简单,本次记录只是加深自己的印象或者下次忘记了可以方便自己来这里寻找。

首先执行完菜品的插入功能:

java 复制代码
dishMapper.addDish(dish);

然后,我们需要获取到插入成功后,生成的菜品对象的id:

java 复制代码
 Long dishId = dish.getId();

当然,像上面这样直接取是拿不到的,因为dish对象才new出来的时候,它的id就是null,只是因为在执行sql插入语句的时候,才生成的id直接插入到数据库表中。所以我们需要在执行插入菜品的sql语句中配置属性来获取到生成的id:

XML 复制代码
 <insert id="addDish" parameterType="com.sky.entity.Dish" useGeneratedKeys="true" keyProperty="id">
        insert into dish (id, name, category_id, price, image, description, status, create_time, update_time, create_user, update_user) values
                         (#{id},#{name},#{categoryId},#{price},#{image},#{description},#{status},#{createTime},#{updateTime},#{createUser},#{updateUser})
    </insert>

如上,只需要配置:useGeneratedKeys="true" keyProperty="id"这两个属性即可,第一个表示开启主键回显,第二个表示回显到dish对象的id属性上面,所以这个id不能乱写,要和你对象的主键id属性名一样。

这样配置后,就可以使用刚刚上面的get方法获取到id值啦!然后就可以按照需要赋值给你所需要的对象属性中去啦!

相关推荐
倒流时光三十年4 小时前
第六阶段 57 · ES|QL 与 SQL API(用 SQL 查 ES)
数据库·sql·elasticsearch
努力进修5 小时前
“数据心脏” 驱动能源自主:国产数据库支撑 Cemsol 实现固井全流程数字化闭环
数据库·人工智能·能源
vHelios5 小时前
SQL不会写?不会找关联表?复杂SQL语句编写逻辑实现思路请查收✉
数据库·sql
DB哥讲数据库5 小时前
【ClickHouse安装教程】从零开始部署高性能列式数据库(附ClickHouse安装包)
数据库·clickhouse
TDengine (老段)6 小时前
TDengine 第三方工具 — Telegraf、Kafka Connect、Flink、Spark
大数据·数据库·物联网·flink·kafka·时序数据库·tdengine
小白勇闯网安圈15 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨15 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
科技绘图16 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl16 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库
ltl16 小时前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库