MyBatis <insert>返回值映射方法记录

问题描述

我有一个Java项目,该项目使用MyBatis访问PostgreSQL数据库. PostgreSQL允许在INSERT语句之后返回新创建的行的字段,我想用它来返回新创建的记录的自动生成的BIGSERIAL id.因此,我更改了XML中的insert命令以使用PostgreSQL的功能,向<insert>标签添加了resultType="long"属性,并且在映射器的Java接口中,我将插入方法设置为返回long void.

当我尝试运行此命令时,我得到一个org.xml.sax.SAXParseExceptionAttribute "resultType" must be declared for element type "insert".

现在,当我将<insert>标记更改为<select>时,一切正常,但是让我感到困扰的是,我使用<select>标记执行INSERT语句.

是否有一种方法可以使映射到<insert>标记的方法返回结果,或者MyBatis不是为此而设计的,我应该将它们保留为<select>标记?

答案

映射插入方法的返回类型可以是voidint(在这种情况下,它将返回插入行的编号).您可以执行以下机制来返回生成的ID:

<insert id="insert" parameterClass="MyParameter">
  <selectKey order="AFTER" keyProperty="id" resultType="long">
    SELECT currval('my_seq')
  </selectKey>
  INSERT INTO mytable(col1, col2) VALUES (#{val1}, #{val2})
</insert>

这会将生成的id列设置为参数类的id属性.之后,您作为参数传递的对象将在其属性中生成id设置.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值