gpt4 book ai didi

java - 如何使用 Spring JDBC 的 MERGE 语句插入/更新单个记录

转载 作者:行者123 更新时间:2023-11-30 02:04:38 28 4
gpt4 key购买 nike

我有一个使用 MERGE 语句创建的更新/插入 SQL 查询。使用 JdbcTemplate 或 NamedParameterJdbcTemplate,Spring 是否提供了一种可用于更新单个记录(而不是批量更新)的方法?

由于此查询将用于通过 JMS 监听器保存队列中的数据,因此我一次仅使一条记录出列,并且不需要批量更新的开销。

如果批处理是通过 Spring JDBC 完成此操作的唯一方法,那很好......我只是想确保我没有错过一些更简单的东西。

最佳答案

您可以使用 SQL MERGE仅使用包含参数的一行查询的语句。

例如,如果您有一个表 COMPANY,其中包含 ID 作为键,NAME 作为属性,则 MERGE声明将是:

merge into company c
using (select ? id, ? name from dual) d
on (c.id = d.id)
when matched then update
set c.name = d.name
when not matched then insert (c.id, c.name)
values(d.id, d.name)

如果您的目标表包含参数化键,则名称将被更新,否则将插入一条新记录。

通过 JDBCTemplate,您可以使用 update方法来调用 MERGE 语句,如下所示(使用 Groovy 脚本)

def id = 1
def name = 'NewName'

String mergeStmt = """merge into company c
using (select ? id, ? name from dual) d
on (c.id = d.id)
when matched then update
set c.name = d.name
when not matched then insert (c.id, c.name)
values(d.id, d.name)""";

def updCnt = jdbcTemplate.update(mergeStmt, id, name);

println "merging ${id}, name ${name}, merged rows ${updCnt}"

关于java - 如何使用 Spring JDBC 的 MERGE 语句插入/更新单个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51711617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com