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值啦!然后就可以按照需要赋值给你所需要的对象属性中去啦!

相关推荐
YGGP17 分钟前
【每日八股】Redis篇(二):数据结构
数据结构·数据库·redis
愉悦的麻婆豆腐28 分钟前
Neo4j使用neo4j-admin导入csv数据方法
数据库·neo4j
夜泉_ly3 小时前
MySQL -安装与初识
数据库·mysql
qq_529835354 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New7 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6757 小时前
数据库基础1
数据库
我爱松子鱼7 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo7 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser8 小时前
【SQL】多表查询案例
数据库·sql
Galeoto8 小时前
how to export a table in sqlite, and import into another
数据库·sqlite