gpt4 book ai didi

java - 如何在带有注释的mysql中使用mybatis在插入时返回id

转载 作者:IT老高 更新时间:2023-10-29 00:09:01 25 4
gpt4 key购买 nike

  • See this related question对于 Postgres。出于某种原因,该解决方案对我不起作用 - 插入语句的返回值始终为“1”。
  • 查看其他问题以获取 XML based solution .我想在没有 XML 的情况下做同样的事情 - 插入一条记录并找到我刚刚插入的记录的新自动生成的 id。

我没有找到与 <selectkey> 匹配的注释(见此open issue)我该如何进行?

检查 mybatis 代码发现 INSERT通过 UPDATE 实现,并且总是返回插入的行数!所以......除非我在这里完全遗漏了一些东西,否则没有办法使用当前的(3.0.3)实现来做到这一点。

最佳答案

实际上,可以使用 @Options 注释(前提是您在数据库中使用 auto_increment 或类似的东西):

@Insert("insert into table3 (id, name) values(null, #{name})") 
@Options(useGeneratedKeys=true, keyProperty="idName")
int insertTable3(SomeBean myBean);

请注意,如果 SomeBean 中的键属性名为“id”,则 keyProperty="idName" 部分不是必需的。还有一个 keyColumn 属性可用,用于 MyBatis 自己找不到主键列的极少数情况。另请注意,通过使用 @Options,您正在将您的方法提交给一些默认参数;查阅文档很重要(链接如下 - 当前版本的第 60 页)!

(旧答案)(最近的)@SelectKey 注释可用于更复杂的 key 检索(序列、identity() 函数...)。这是 MyBatis 3 User Guide 的内容(pdf) 提供示例:

This example shows using the @SelectKey annotation to retrieve a value from a sequence before an insert:

@Insert("insert into table3 (id, name) values(#{nameId}, #{name})") 
@SelectKey(statement="call next value for TestSequence", keyProperty="nameId", before=true, resultType=int.class)
int insertTable3(Name name);

This example shows using the @SelectKey annotation to retrieve an identity value after an insert:

@Insert("insert into table2 (name) values(#{name})")
@SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
int insertTable2(Name name);

关于java - 如何在带有注释的mysql中使用mybatis在插入时返回id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com