2012-08-10 2 views
0

Je ne trouve pas d'exemple de mappage dans MyBatis avec lequel je peux remplacer le code ci-dessous.Remplacer la procédure stockée par le mappage MyBatis

"si sqlcode <> 0" Si aucune mise à jour a lieu alors faire un insert

Toute 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 

Répondre

0

Je ne pense pas que mybatis a une cartographie de dire « essayer une mise à jour, si cela échoue faire un insert ». Si vous voulez que cela soit fait dans un aller-retour à la base de données, alors une procédure stockée est appropriée. Vous pouvez appeler cette procédure stockée à partir de MyBatis, mais la logique if/else serait dans le proc stocké.

Si vous essayez de vous débarrasser de la procédure stockée, vous devrez effectuer une vérification en deux étapes dans votre code. Une mise à jour dans MyBatis renvoie le nombre de lignes mises à jour (via le pilote JDBC), donc si c'est zéro, alors vous pouvez appeler un mappage d'insertion MyBatis. Dans les cas où une insertion se produit, il faudrait deux allers-retours à la base de données.

Vous pouvez également faire un "upsert" en utilisant une instruction MERGE dans un proc stocké, mais ce n'est bien sûr pas lié à MyBatis autre que MyBatis peut appeler votre proc stocké. Il semble que vous utilisez Sybase? Si oui, je ne suis pas sûr si Sybase a upserts - lien vers la recherche: Upsert (update or insert) in Sybase ASE?

+0

Merci! Juste un detial, vous voulez dire qu'une mise à jour dans MyBatis a une déclaration de retour de 1 ou 0 si je mets à jour une seule ligne? Si c'est le cas, avez-vous un exemple ou pouvez-vous m'en donner un? – user1416776

+0

Ok, je l'ai eu ... si simple :) http://edwin.baculsoft.com/2010/11/beginning-mybatis-3/ Je préférerais normalement une procédure stockée mais je veux pratiquer MyBatis. – user1416776

+0

On dirait que vous l'avez. Si vous voulez plus d'exemples d'insertion et de mise à jour et de vérification de la valeur de retour, voir Koan08 des mybatis-koans: https://github.com/midpeter444/mybatis-koans/blob/master/src/test/java/net/ thornydev/mybatis/test/koan08/Koan08.java – quux00

Questions connexes