我找不到MyBatis中的映射示例,我可以用。替换下面的代码。
“if sqlcode<> 0”如果没有更新,则执行插入
任何sugestions? :)
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 :(得分:0)
我不认为MyBatis有任何映射说“尝试更新,如果失败则执行插入”。如果您希望在数据库的往返中完成,那么存储过程是合适的。您可以从MyBatis调用此存储过程,但if / else逻辑将位于存储过程中。
如果您试图摆脱存储过程,那么您需要在代码中进行两步检查。 MyBatis中的更新返回更新的行数(通过JDBC驱动程序),因此如果为零,则可以调用MyBatis插入映射。如果发生插入,则需要两次往返数据库。
您还可以在存储过程中使用MERGE语句执行“upsert”,但这当然与MyBatis无关,除了MyBatis可以调用您的存储过程。看起来你在使用Sybase?如果是这样,我不确定Sybase是否有upserts - 链接到研究:Upsert (update or insert) in Sybase ASE?