postgresql - 从 MyBatis <insert> 映射方法返回值

标签 postgresql mybatis

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

关于postgresql - 从 MyBatis <insert> 映射方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456033/

相关文章:

mysql - 计算 SQL 查询执行并将行转换为 mybatis 中的 java 对象所需的时间

node.js - 与 NodeJS 和 Informix DB 一起使用的最佳 ORM 框架是什么?还支持事务管理

arrays - Postgres 8.4.3 : How do convert names and string of names to normalized numerical ids using unnest

python - 如何使用带有多个百分比 (%) 符号的 PostgreSQL 和 Python 类似模式匹配?

java - Spring Boot 与 SessionScope 的问题

mysql - mybatis 生成器 "Column name pattern can not be NULL or empty"

java - Mybatis如何运行sql "desc table"

java - Postgres 触发器更新 Java 缓存

java - 通过不稳定的网络同步本地数据库和远程应用程序

postgresql - 相当于整数和范围组成的排除约束