0

以下のコードを置き換えることができる MyBatis のマッピングの例が見つかりません。

"if 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
4

1 に答える 1

0

MyBatisには、「更新を試してください。失敗した場合は挿入を実行してください」というマッピングはないと思います。データベースへの1回のラウンドトリップでそれを実行する場合は、ストアドプロシージャが適切です。このストアドプロシージャはMyBatisから呼び出すことができますが、if/elseロジックはストアドプロシージャに含まれます。

ストアドプロシージャを削除しようとしている場合は、コードを2段階でチェックする必要があります。MyBatisでの更新は、(JDBCドライバーを介して)更新された行数を返すため、それがゼロの場合は、MyBatis挿入マッピングを呼び出すことができます。挿入が発生した場合、データベースへの2回のラウンドトリップが必要になります。

ストアドプロシージャでMERGEステートメントを使用して「アップサート」を実行することもできますが、もちろん、MyBatisがストアドプロシージャを呼び出すことができる以外は、MyBatisとは関係ありません。Sybaseを使用しているようですか?もしそうなら、Sybaseにアップサートがあるかどうかわかりません-調査へのリンク:Sybase ASEのアップサート(更新または挿入)?

于 2012-08-11T12:37:49.987 に答える