MyBatis - ResultHandler не вызывается, когда оператор select не возвращает строки

Я передаю ResultSet, используя ResultHandler сеанса ibatis.

У меня есть собственная реализация ResultHandler

public class StreamResultHandler<T> implements ResultHandler
{
    private JobType<T> job;

    public StreamResultHandler(ReplicatorType<T> replicatorType)
    {
        this.job = replicatorType;
    }

    @Override
    public void handleResult(ResultContext context)
    {
        T type = (T) context.getResultObject();
        job.callEndPointService(type);
    }
}

Когда мой оператор select не возвращает ни одной строки, mybatis даже не вызывает метод handleResult. Я хочу сделать некоторые обновления в базе данных, когда строки не возвращаются.

Есть ли счетчик/флаг, указывающий количество строк? Как я могу этого добиться.

Я использую mybatis-3.2.2.

Любая помощь приветствуется.

Заранее спасибо.


person Sahith    schedule 21.01.2015    source источник
comment
И почему он вызывается, если строки не возвращаются? Разве это не то, что вы ожидаете? Нет результатов - нет звонка?   -  person Kong    schedule 16.03.2015


Ответы (1)


Добавьте count к реализации StreamResultHandler и увеличьте его в handleResult(). Общие обработанные результаты будут доступны в методе count(), как описано ниже.

public class StreamResultHandler<T> implements ResultHandler
{
    private JobType<T> job;
    private int count;

    public StreamResultHandler(ReplicatorType<T> replicatorType)
    {
        this.job = replicatorType;
    }

    @Override
    public void handleResult(ResultContext context)
    {
        T type = (T) context.getResultObject();
        job.callEndPointService(type);
        count++;
    }

    public int count()
    {
        return count;
    }

}
person sodwyer    schedule 28.01.2016