Java MyBatis appel de procédure stockée avec des paramètres

Première question:
Je suis en train d'essayer de revenir un paramètre de SORTIE et non pas un jeu de résultats avec des annotations. Tout d'abord, est-il même possible? Si elle l'est, comment pourrait-on faire cela?

MyBatis: 3.0.6

Base de données: SQL Server 2008

Voici un exemple de la syntaxe de mon appel de méthode dans la UserDAO:

@Select(value= "{ CALL saveUser( "
        + "#{userId, mode=IN, jdbcType=INTEGER},"
        + "#{firstname, mode=IN, jdbcType=VARCHAR},"
        + "#{lastname, mode=IN, jdbcType=VARCHAR},"
        + "#{message, mode=OUT, jdbcType=VARCHAR}"
        + ")}")
@Options(statementType=StatementType.CALLABLE)
public String saveUser(
        @Param("userId") int userId,
        @Param("firstname") String firstname,
        @Param("lastname") String lastname);

Je suis de retour un message de toutes de mes "sauver" des procédures et pour que je puisse retourner une réponse à l'utilisateur: l'Utilisateur "enregistrer avec succès","Erreur lors de l'enregistrement de l'utilisateur","Vous n'avez pas l'autorisation d'enregistrer cet utilisateur", etc. Je sais que le retour d'un jeu de résultats permettra de résoudre le problème, c'est juste que je ne veux pas changer tous mes interventions!

Deuxième question: Est-il possible de retourner un "SaveProcedureResponse" peuplée de plusieurs paramètres? Par exemple:

@Select(value= "{ CALL saveUser( "
        + "#{userId, mode=IN, jdbcType=INTEGER},"
        + "#{firstname, mode=IN, jdbcType=VARCHAR},"
        + "#{lastname, mode=IN, jdbcType=VARCHAR},"
        + "#{message, mode=OUT, jdbcType=VARCHAR},"
        + "#{status, mode=OUT, jdbcType=VARCHAR},"
        + "#{returnCode, mode=OUT, jdbcType=INTEGER}"
        + ")}")
@Options(statementType=StatementType.CALLABLE)
public SaveProcedureResponse saveUser(
        @Param("userId") int userId,
        @Param("firstname") String firstname,
        @Param("lastname") String lastname);

Où le bean ressemble à ceci:

public class SaveProcedureResponse {
    private String message;
    private String status;
    private int returnCode;

    public SaveProcedureResponse(String message, String status, int returnCode) {
        this.message = message;
        this.status = status;
        this.returnCode = returnCode;
    }
}

Merci!

OriginalL'auteur snoozy | 2012-02-09