MyBatis 在insert插入操作时返回主键ID的配置

     很多时候,在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键。
     但是,在默认情况下,insert操作返回的是一个int值,并且不是表示主键id,而是表示当前SQL语句影响的行数。
     接下来,我们看看MyBatis如何在使用MySQL和Oracle做insert插入操作时将返回的id绑定到对象中。

     对于 MySQL 数据库只需要设置 keyProperty、keyColumn、useGeneratedKeys 属性
<!--
     keyProperty: 把主键值赋给 bean 的哪一个属性
     keyColumn: 使用哪一列的值来进行赋值
     useGeneratedKeys="true": 使用自增的方式来生成主键值
-->
<insert id="testDatabaseId" databaseId="mysql"
     keyProperty="id" keyColumn="id" useGeneratedKeys="true">
     INSERT INTO students(last_name, birth)
     VALUES(#{lastName}, #{birth})
</insert>
     对于 Oracle 数据库. 使用 selectKey
<insert id="testDatabaseId" databaseId="oracle">
     <!--
          对于 Oracle 而言, 需要使用 selectKey 来生成主键值,
          order="BEFORE": 先于 INSERT 执行
          selectKey 的标签体: 指定生成主键的查询语句. SELECT 序列名.nextval FROM dual
          keyColumn: 使用哪一列的值来进行赋值 ,在oracle中可以省略不写
          keyProperty: 把标签体的查询结果赋给 bean 的哪一个属性.
          resultType: 执行标签体查询的结果类型.
          注意: 下面编写 SQL 时, 主键不能再次使用序列生成. 而要使用 #{keyProperty}
     -->
     <selectKey order="BEFORE"
          keyColumn="id"  keyProperty="id" resultType="int">
          SELECT my_seq.nextval FROM dual
     </selectKey>

     INSERT INTO students(id, last_name, birth)
     VALUES(#{id}, #{lastName}, #{birth})
</insert>
    注意:Oracle用法中,需要注意的是:由于Oracle没有自增长一说法,只有序列这种模仿自增的形式,所以不能再使用“useGeneratedKeys”属性。
     而是使用<selectKey>将ID获取并赋值到对象的属性中,insert插入操作时正常插入id。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值