我有一个主键表,由几列组成。有一个带有特殊Oracle钩子的批量插入 - ignore_row_on_dupkey_index。该钩子允许忽略唯一约束异常,重复记录被忽略,而非重复成功插入。使用简单的jdbc我可以通过代码轻松返回主键(由几列组成):
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
}
然后我可以通过迭代返回的键来分析重复项。
我想通过MyBatis实现同样的目标。我找到了Options annotation,它允许通过设置属性useGeneratedKeys和keyColumn来实现。问题是我有复杂的主键,而keyColumn有类型String。另外,我不想使用SelectKey注释。
所以我的问题是我可以返回几列值以及MyBatis是如何返回的?
谢谢。
keyColumn
允许指定多个列。这是the documentation的相关部分(注意最后一句):
keyColumn | (仅插入和更新)使用生成的密钥设置表中列的名称。仅当键列不是表中的第一列时,才需要在某些数据库(如PostgreSQL)中使用此选项。如果需要多个生成的列,则可以是以逗号分隔的列名列表。
以及来自mybatis tests的一个例子:
<insert id="insertTable2WithGeneratedKeyXml" useGeneratedKeys="true"
keyProperty="nameId,generatedName" keyColumn="ID,NAME_FRED">
insert into table2 (name) values(#{name})
</insert>