insert 返回值_map insert

insert 返回值_map insert背景说明MyBatis中,在大多数情况下,我们向数据库中插入一条数据之后,并不需要关注这条新插入数据的主键ID。我们也知道,正常在DAO中的插入语句虽然可以返回一个int类型的值,但是这个值表示的是插入影响的行数

背景说明

MyBatis中,在大多数情况下,我们向数据库中插入一条数据之后,并不需要关注这条新插入数据的主键ID。我们也知道,正常在DAO中的插入语句虽然可以返回一个int类型的值,但是这个值表示的是插入影响的行数,而不是新插入数据的主键ID。

近期有一个需求,核心是保存一些巡检结果的报错信息,但是由于报错详情可能会比较多,所以计划首先将报错详情记录在一个扩展表中,然后将这个扩展表记录的主键ID保存在错误记录表中。因此这里就有一个问题,怎么在插入扩展表之后,能够直接获取到其主键ID呢?本文将简要记录两种常见的处理方式。

解决思路

不论是用哪种方式,其核心点都是:

  • 在mapper.xml文件中的插入语句中进行设置,让插入结果能够获取到主键id
  • 在调用DAO插入方法之后,从插入方法的入参DO中,获取到插入结果的主键id

配置mapper.xml

方式一

在insert里面配置“useGeneratedKeys”和“keyProperty”属性:

  • useGeneratedKeys :取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中
  • keyProperty :默认值unset,用于设置getGeneratedKeys方法或selectKey子素返回值将赋值到DO的哪个属性中
 <insert id="insertDataErrorExtension" parameterType="com.xx.campaign.dataobject.DataErrorExtensionDO" useGeneratedKeys="true" keyProperty="id"> insert into data_error_extension (group_id, page_id, module_id, tag_id, schedule_id, error_type, error_code, error_level, error_message, error_details, status, version, attr) values (#{groupId}, #{pageId}, #{moduleId}, #{tagId}, #{scheduleId}, #{errorType},#{errorCode}, #{errorLevel}, #{errorMessage}, #{errorDetails}, #{status}, #{version}, #{attr}) </insert>

方式二

在Insert里面增加一个selectKey节点:

  • 节点属性:resultType: 表示返回节点值的属性;order:可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 素keyProperty:selectKey 语句结果应该被设置的目标属性。
  • 节点执行语句,即应该如何获取主键id,可以尝试用下面两种方式之一:
  1. SELECT LAST_INSERT_ID()
  2. select @@IDENTITY
 <insert id="insertDataErrorExtension" parameterType="com.xx.campaign.dataobject.DataErrorExtensionDO"> <selectKey resultType="long" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() </selectKey> insert into data_error_extension (group_id, page_id, module_id, tag_id, schedule_id, error_type, error_code, error_level, error_message, error_details, status, version, attr) values (#{groupId}, #{pageId}, #{moduleId}, #{tagId}, #{scheduleId}, #{errorType},#{errorCode}, #{errorLevel}, #{errorMessage}, #{errorDetails}, #{status}, #{version}, #{attr}) </insert>

在代码中获取主键id

这里的重点是,DAO的insert方法一定要传对应的DO对象,示例方法签名如下:

 / * 插入Data error extension * * @param dataErrorExtensionDO dataErrorExtensionDO * * @return 影响行数 * * @throws Exception 插入异常 */ Integer insertDataErrorExtension(DataErrorExtensionDO dataErrorExtensionDO) throws Exception;

然后调用DAO的insert方法后,就可以从DO对应中获取到自增主键id

insert 返回值_map insert

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/16705.html

(0)
上一篇 2024年 9月 17日
下一篇 2024年 9月 17日

相关推荐

关注微信