2012-08-10 127 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