- 起因:需要返回insert的 生成的主键,动态添加
- 参考:
标题 网址 Mybatis 动态insert语句
https://blog.csdn.net/qq_35661171/article/details/82260708 Mybatis中,当插入数据后,返回最新主键id的几种方法,及具体用法
https://blog.csdn.net/yueloveme/article/details/78483072 -
代码:
Controller和Mybatis xml代码
@RequestMapping(value = "/save", method = {RequestMethod.POST, RequestMethod.GET}) @RequiresPermissions("app:notice:save") @ApiOperation("保存") public R save(@RequestBody @ApiParam(name = "对象", value = "传入json格式", required = true) NoticeEntity notice) { /*** * 需求: * 保存一个,添加进去关系表中,循环 添加 */ notice.setCreatetime(new Date()); notice.setModifytime(new Date()); noticeService.insertOrID(notice); //注意返回主键ID是返回到你的实体类中的,直接取值就可以了 if (notice.getId() == null || notice.getId() == 0) { return R.error("添加错误"); } }
<!-- 动态添加并返回生成的编号 --> <insert id="insertOrID" parameterType="io.huban.modules.app.entity.NoticeEntity" useGeneratedKeys="true" keyProperty="id"> insert into tb_notice <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">id,</if> <if test="content != null">content,</if> <if test="status != null">status,</if> <if test="createtime != null">createtime,</if> <if test="modifytime != null">modifytime</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null">#{id},</if> <if test="content != null">#{content},</if> <if test="status != null">#{status},</if> <if test="createtime != null">#{createtime},</if> <if test="modifytime != null">#{modifytime}</if> </trim> </insert>
具体的参数如下:
参数名 解释 useGeneratedKeys 默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中 keyProperty 取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了 trim mybatis中的循环语句定义了prefix:前缀,suffix:后缀,还有suffixOverrides:间隔中应添加的