Вызов хранимой процедуры Java MyBatis с параметрами OUT

Первый вопрос: Я пытаюсь вернуть один параметр OUT, а не набор результатов с аннотациями. Во-первых, возможно ли это вообще? Если да, то как это сделать?

MyBatis: 3.0.6

База данных: SQL Server 2008

Вот пример синтаксиса моего вызова метода в 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);

Я возвращаю сообщение из всех моих процедур «сохранения», и поэтому я могу вернуть ответ пользователю: «Пользователь успешно сохранен», «Ошибка сохранения пользователя», «У вас нет разрешения на сохранение этого пользователя» и т. д. Я знаю, что возврат набора результатов решит проблему, просто я не хочу менять все свои процедуры!

Второй вопрос: Можно ли вернуть «SaveProcedureResponse», заполненный несколькими параметрами OUT? Например:

@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);

Где bean выглядит так:

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;
    }
}

Спасибо!

5
задан snoozy 9 February 2012 в 17:32
поделиться