mybatis - 如何使用 mybatis 获取更新行?

标签 mybatis

如果我使用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/

相关文章:

java - MyBatis 加载 XML : java. io.IOException: Could not find resource (eclipse)

oracle - Mybatis,用序列id插入Oracle

java - Mybatis执行存储过程时无法设置OUT参数

java - 如何使用 Oracle DB 在 Spring/mybatis 应用程序中设置默认模式?

java - Mybatis几个jndi名称

java - 事务回滚在 JUnit5 的 @Nested 类的测试用例中不起作用

sql - (如何)我可以在 MyBatis 的 SQL 查询中安全且与数据库无关地使用 "LIKE"吗?

java - Mybatis中的foreach是硬解析还是软解析?

java - 尝试插入空值时 mybatis 与 spring 出错

MyBatis 多结果集