MyBatis插入一条记录同时获取刚插入数据的id

在关联表数据的插入中,先插入主表数据,主表数据的id设计为自增长,然后再插入辅表数据,其中主表的id值需要作为辅表字段的值插入辅表中,如何实现更便捷呢?之前使用的笨方法,先判断主表是否插入成功,如果插入成功,根据倒序查询出最近一条记录,从而得到刚插入主表数据的id。事实上,有一种方法更快捷省事,就是在插入主表的SQL中,使用

useGeneratedKeys="true" keyProperty="id" 即可实现。(注意id需替换为自己表id对应的属性名),具体如下:
 <insert id="insert" parameterType="com.project.shfw.huifang.bean.HuiFang" useGeneratedKeys="true" keyProperty="id">
    insert into huifang
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
    ..........
   </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id},
      </if>
   .........
   </trim>
  </insert>

下面是业务层代码:

 //插入主表数据,此时record中的id为null
 i=huiFangMapper.insert(record);
 //主表插入成功后,此时record中的id为数据表自增长生成的具体id值
 insertHfUnit(record);

下面为数据主表的数据:

下面是辅表的数据:

可见在xml映射文件的insertSQL中设置useGeneratedKeys为true,并指定主键id在实体类的属性名,将会返回数据库自动生成的记录主键id

发布了137 篇原创文章 · 获赞 28 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/shenxiaomo1688/article/details/102893211