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

Изпращам поточно ResultSet с помощта на ibatis session ResultHandler.

Имам собствена реализация на 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