Mybatis pozostawia wiele rzeczy w gestii SQL driver który jest używany i wygląda dokładnie tak samo, jak otaczające RowBounds jest jednym z nich.
Zobacz https://mybatis.github.io/mybatis-3/java-api.html, w szczególności sekcję, która mówi:
Różni kierowcy są w stanie osiągnąć różne poziomy wydajności w tym zakresie. Aby uzyskać najlepszą wydajność, użyj typów zestawów wyników SCROLL_SENSITIVE lub SCROLL_INSENSITIVE (innymi słowy:notFORWARD_ONLY).
Wartość domyślna to najwyraźniej UNSET , ale możesz spróbować użyć SCROLL_SENSITIVE jako ResultSetType atrybut w select tag i zobacz, czy to pomaga. Zobacz https://mybatis.github.io/mybatis-3/sqlmap-xml.html, aby uzyskać więcej informacji na ten temat.
Jeśli to nie zadziała, zawsze możesz obejść ten problem, rezygnując z używania RowBounds i zaimplementuj SettingsBean klasę (lub podobną), którą select tag przyjmie jako parameterType , który zawiera pola dla offset i limit (lub może rowStart i rowEnd bardziej sensowne dla Oracle , a następnie można je ustawić w czasie wykonywania zgodnie z potrzebami i interpolować je dynamicznie do SQL w momencie select jest wykonywany.
Podczas gdy trochę więcej kodu, możesz kontrolować zachowanie dokładnie tak, jak chcesz, za pomocą czystego dynamicznego SQL. Użyłem takiego podejścia z Mybatis i Postgres i działa dobrze.
Więc zaimplementujesz swój SettingsBean klasę z tymi polami i ich getterami i seterami, a twój select oświadczenie może wtedy wyglądać mniej więcej tak:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>