First question: I'm trying to return a single OUT parameter, not a result set with annotations. First, is this possible? If so, how to do it?
MyBatis: 3.0.6
Database: SQL Server 2008
Here is an example of the syntax of my method call in 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);
I return a message from all my “saved” procedures and therefore I can return a response to the user: “User successfully saves”, “Error saving user”, “You do not have permission to save this user”, etc. I know that returning a result set will solve the problem, namely that I do not want to change all my procedures!
Second question: Is it possible to return a "SaveProcedureResponse" populated from several OUT parameters? For instance:
@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);
Where the bean looks like this:
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; } }
Thanks!