[英]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.