2012-08-10 53 views
0

我無法在MyBatis中找到映射的示例,我可以用下面的代碼替換它。用MyBatis映射替換存儲過程

「如果SQLCODE <> 0」,如果沒有更新發生,然後執行插入

任何建議嗎? :)

as 
begin 
    execute SetDefaultIsolationLevel 
    update COMPANYLEVEL 
    set 
    companylevelid = @companylevelid, 
    companynameid = @companynameid, 
    level = @level, 
    memo = @memo, 
    operator = @operator, 
    changed = getdate(*) 
    where 
    companynameid = @companynameid 
    if sqlcode <> 0 
    BEGIN 
    insert into COMPANYLEVEL 
     (companylevelid,companynameid,level,memo,operator,changed) 
    values 
     (@companylevelid,@companynameid,@level,@memo,@operator,getdate(*)) 
    END 
    commit transaction 
end 

回答

0

我不認爲MyBatis有任何映射說「嘗試更新,如果失敗做插入」。如果你希望在數據庫中進行一次往返,那麼存儲過程是合適的。您可以從MyBatis調用此存儲過程,但if/else邏輯將位於存儲過程中。

如果您試圖擺脫存儲的proc,那麼您需要在代碼中進行兩步檢查。 MyBatis中的更新返回更新的行數(通過JDBC驅動程序),因此如果該值爲零,則可以調用MyBatis插入映射。在發生插入的情況下,它需要兩次往返數據庫。

你也可以在存儲過程中使用MERGE語句做一個「upsert」,但這當然與MyBatis無關,除了MyBatis可以調用你的存儲過程。它看起來像你正在使用Sybase?如果是這樣,我不知道如果Sybase有upserts - 鏈接到研究:Upsert (update or insert) in Sybase ASE?

+0

謝謝! 只是一個祕密,你的意思是說,如果我只更新一行,MyBatis中的更新有1或0的返回語句? 如果是這樣的話,你有一個例子,或者可以給我一個鏈接? – user1416776 2012-08-13 06:08:36

+0

好的,我知道了...這麼簡單:) http://edwin.baculsoft.com/2010/11/beginning-mybatis-3/ 我會正常預先存儲程序,但我想練習MyBatis。 – user1416776 2012-08-13 06:41:57

+0

看起來像你知道的。如果你想要更多的插入和更新的例子,並檢查返回值,請參閱mybatis-koans的Koan08:https://github.com/midpeter444/mybatis-koans/blob/master/src/test/java/net/ thornydev/MyBatis的/測試/ koan08/Koan08.java – quux00 2012-08-13 12:58:52