本文主要是介绍Mybatis 之 useGeneratedKeys,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
数据库中主键基本都设置为自增,当我们要插入一条数据想要获取这条数据的 Id 时,就可使用 Mybatis 中的 useGeneratedKeys 属性。
背景
这里以 苍穹外卖 中的 新增菜品 功能为例,有 菜品表(dish table)和 口味表(dish_flavor table),两表的字段如下所示。
dish表
dish_flavor表
其中 dish_id 为逻辑外键,当新增菜品时,纪要插入菜品信息,也要保存对应的口味信息。因为当插入数据时无法直接获取到菜品的主键(dish表中的id值),所以无法给逻辑外键(dish_flavor 中的dish_id 字段)赋值,此时就可以通过 useGeneratedKeys 来操作。
代码
DishMapper.xml
<mapper namespace="com.sky.mapper.DishMapper"><!--useGeneratedKeys表示要返回自增主键, 返回结果保存到 id 字段中--><insert id="insert" useGeneratedKeys="true" keyProperty="id">insert into dish(name, category_id, price, image, description, status, create_time, update_time, create_user, update_user)values(#{name}, #{categoryId}, #{price}, #{image}, #{description}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})</insert></mapper>
DishFlavorMapper.xml
<mapper namespace="com.sky.mapper.DishFlavorMapper"><insert id="insertBatch">insert into dish_flavor(dish_id, name, value) values<foreach collection="flavors" item="flavor" separator=",">(#{flavor.dishId}, #{flavor.name}, #{flavor.value})</foreach></insert></mapper>
ServiceImpl.java
这篇关于Mybatis 之 useGeneratedKeys的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!