【问题标题】:How to return multiple generated columns after insert in MyBatis(Oracle)在 MyBatis(Oracle) 中插入后如何返回多个生成的列
【发布时间】:2019-04-30 07:19:17
【问题描述】:

我有一个带有主键的表,它由几列组成。有带有特殊 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 注释,它允许通过设置属性 useGeneratedKeyskeyColumn 来实现。问题是我有复杂的主键,而 keyColumn 有字符串类型。 我也不想使用 SelectKey 注释。

所以我的问题是我可以通过 MyBatis 返回几列值吗?

谢谢。

【问题讨论】:

    标签: java oracle jdbc mybatis


    【解决方案1】:

    keyColumn 允许指定多个列。这是the documentation的相关部分(注意最后一句):

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

    还有一个来自mybatistests的例子:

    <insert id="insertTable2WithGeneratedKeyXml" useGeneratedKeys="true"
        keyProperty="nameId,generatedName" keyColumn="ID,NAME_FRED">
      insert into table2 (name) values(#{name})
    </insert>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 2017-10-19
      • 1970-01-01
      • 2019-04-22
      • 2013-09-01
      • 1970-01-01
      相关资源
      最近更新 更多