如果我使用mybatis,我可以很容易地得到更新的行数,就像
update table set desc = 'xxx' where name = ?
但是,如果我想获取更新的行数,而不是计数,我该如何通过 mybatis 来实现呢?
最佳答案
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
将不起作用)以确保第二个选择看到更新后的状态并且看不到某些并发更新所做的更改。同样,您是否需要这个取决于您使用的数据库。
关于mybatis - 如何使用 mybatis 获取更新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49491741/