Stored procedures 用MyBatis映射替换存储过程

Stored procedures 用MyBatis映射替换存储过程,stored-procedures,insert,sybase,mybatis,Stored Procedures,Insert,Sybase,Mybatis,我在MyBatis中找不到可以替换以下代码的映射示例 “if sqlcode 0”如果未发生更新,则执行插入 有什么建议吗?:) as 开始 执行SetDefaultIsolationLevel 更新公司级别 设置 companylevelid=@companylevelid, companynameid=@companynameid, 级别=@level, memo=@memo, 运算符=@运算符, 已更改=getdate(*) 哪里 companynameid=@companynameid

我在MyBatis中找不到可以替换以下代码的映射示例

“if sqlcode 0”如果未发生更新,则执行插入

有什么建议吗?:)

as
开始
执行SetDefaultIsolationLevel
更新公司级别
设置
companylevelid=@companylevelid,
companynameid=@companynameid,
级别=@level,
memo=@memo,
运算符=@运算符,
已更改=getdate(*)
哪里
companynameid=@companynameid
如果sqlcode为0
开始
插入公司级
(公司级别ID、公司名称ID、级别、备忘录、操作员、已更改)
价值观
(@companylevelid、@companynameid、@level、@memo、@operator、getdate(*))
结束
提交事务
结束

我认为MyBatis没有任何映射来表示“尝试更新,如果失败,请执行插入”。如果您希望在数据库的一次往返中完成此操作,那么存储过程是合适的。您可以从MyBatis调用此存储过程,但if/else逻辑将位于存储过程中

如果您试图删除存储的进程,那么您需要在代码中进行两步检查。MyBatis中的更新返回更新的行数(通过JDBC驱动程序),因此如果该行数为零,则可以调用MyBatis插入映射。在发生插入的情况下,需要两次往返数据库


您还可以在存储过程中使用MERGE语句执行“upsert”,但这当然与MyBatis无关,MyBatis可以调用存储过程。看起来你在用Sybase?如果是这样,我不确定Sybase是否有优势-链接到研究:

谢谢!只是一个细节,你的意思是,如果我只更新一行,MyBatis中的更新的返回语句是1还是0?如果是这样的话,你有一个例子或者可以给我一个链接吗?好的,我知道了。。。很简单:)我通常更喜欢一个存储过程,但我想练习MyBatis。看起来你明白了。如果您想了解更多有关插入和更新以及检查返回值的示例,请参阅mybatis koans的Koan08:
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