我有一个使用 MyBatis 访问 PostgreSQL 数据库的 Java 项目。 PostgreSQL 允许在 INSERT
之后返回新创建行的字段语句,我想用它来返回自动生成的 BIGSERIAL
id
新创建的记录。所以,我更改了 insert
在 XML 命令中使用 PostgreSQL 的功能,添加一个 resultType="long"
属性为 <insert>
标记,并在映射器的 Java 接口(interface)中我将插入方法设置为返回 long
而不是 void
.
当我尝试运行它时,我得到一个 org.xml.sax.SAXParseException
说Attribute "resultType" must be declared for element type "insert"
.
现在,当我更改 <insert>
标记为 <select>
一切正常,但我使用 <select>
令我很困扰标签执行 INSERT
声明。
有没有办法让方法映射到<insert>
标签返回结果,或者 MyBatis 不是为此设计的,我应该将它们保留为 <select>
标签?
最佳答案
映射插入方法的返回类型可以是void
或int
(在这种情况下它将返回插入行的编号)。您可以执行以下机制来返回生成的 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
集。
关于postgresql - 从 MyBatis <insert> 映射方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456033/