Java 如何在MyBatis(Oracle)中插入后返回多个生成的列

Java 如何在MyBatis(Oracle)中插入后返回多个生成的列,java,oracle,jdbc,mybatis,Java,Oracle,Jdbc,Mybatis,我有一个主键表,它由几列组成。有一个带有特殊Oracle钩子的批插入-忽略索引上的行。该钩子允许忽略唯一的约束异常,重复记录被忽略,而非重复记录被成功插入。使用简单的jdbc,我可以通过代码轻松返回主键(由几列组成): 然后我可以通过迭代返回的键来分析重复项 我想通过MyBatis实现同样的目标。我找到了选项注释,它允许通过设置属性useGeneratedKeys和keyColumn来实现。问题是我有复杂的主键,而keyColumn有类型字符串。 另外,我不想使用SelectKey注释 所以我的

我有一个主键表,它由几列组成。有一个带有特殊Oracle钩子的批插入-忽略索引上的行。该钩子允许忽略唯一的约束异常,重复记录被忽略,而非重复记录被成功插入。使用简单的jdbc,我可以通过代码轻松返回主键(由几列组成):

然后我可以通过迭代返回的键来分析重复项

我想通过MyBatis实现同样的目标。我找到了选项注释,它允许通过设置属性useGeneratedKeyskeyColumn来实现。问题是我有复杂的主键,而keyColumn有类型字符串。 另外,我不想使用SelectKey注释

所以我的问题是,我可以返回几个列的值吗?如何返回MyBatis值


谢谢。

keyColumn
允许指定多个列。以下是相关内容(注意最后一句):

keyColumn |(仅限插入和更新)使用生成的键设置表中列的名称。只有在键列不是表中的第一列时,某些数据库(如PostgreSQL)才需要这样做。如果需要多个生成的列,则可以是以逗号分隔的列名称列表

还有mybatis的一个例子:


在表2(名称)中插入值(#{name})
try(PreparedStatement st = connectio.preparedStatement("insert /* ignore_row_on_dupkey(Table_name, Constraint) */ into TABLE(c1, c2, c3) values(?,?,?)", new String [] {"c1", "c2"})) {
//Batch insert then get generated keys
}
<insert id="insertTable2WithGeneratedKeyXml" useGeneratedKeys="true"
    keyProperty="nameId,generatedName" keyColumn="ID,NAME_FRED">
  insert into table2 (name) values(#{name})
</insert>