如何使用mybatis获取更新行?

时间:2018-03-26 12:41:42

标签: mybatis

如果我使用mybatis,我可以轻松获得更新行的数量,就像

一样
update table set desc = 'xxx' where name = ?

但是,如果我想获取更新的行而不是计数,我怎样才能通过mybatis实现这一目标?

1 个答案:

答案 0 :(得分:1)

mybatis本身无法做到这一点,因为此更新发生在数据库中,并且不会返回任何行数据。

唯一的选择是修改查询并使其更新并选择您需要的数据。实现此效果的确切方法取决于您使用的数据库和/或驱动程序支持。

例如,在postgres中,您可以更改查询并添加RETURNING clause,如下所示:

UPDATE table
SET desc = 'xxx'
WHERE name = ?
RETURNING *

这会将此查询转换为选择的查询,您可以将其映射为mybatis中的select查询。其他一些数据库也有类似的功能。

另一个选项(如果您的数据库和/或JDBC驱动程序支持此选项)是执行两个查询,更新并选择此类

<select id='updateAndReturnModified" resultMap="...">
    UPDATE table
    SET desc = 'xxx'
    WHERE name = @{name};
    SELECT *
    FROM table
    WHERE name = @{name};
</select>

然而,这可能需要使用更严格的隔离级别(例如READ_COMMITED将不起作用)以确保第二个选择在更新后看到状态并且看不到某些并发更新所做的更改。无论您是否需要,取决于您正在使用的数据库。