[英]How to insert/update a single record using a MERGE statement with Spring JDBC
我有一个使用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)
如果目标表包含参数化的键,则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}"
只需使用一种update
方法,例如以下一种: JdbcTemplate#update而不是BatchUpdate。
Update
更新单个记录, batchUpdate
使用JDBC批处理更新多个记录
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.