Mybatis nechává mnoho věcí na SQL driver který se používá, a zdá se, že se přesně chová kolemRowBounds je jedním z nich.
Viz https://mybatis.github.io/mybatis-3/java-api.html, zejména část, která říká:
Různí řidiči jsou v tomto ohledu schopni dosáhnout různé úrovně účinnosti. Nejlepšího výkonu dosáhnete, když použijete typy sady výsledků SCROLL_SENSITIVE nebo SCROLL_INSENSITIVE (jinými slovy:ne FORWARD_ONLY).
Výchozí hodnota je zřejmě UNSET , ale můžete zkusit použít SCROLL_SENSITIVE jako ResultSetType atribut v select tag a uvidíme, jestli to pomůže. Více informací naleznete na https://mybatis.github.io/mybatis-3/sqlmap-xml.html.
Pokud to nefunguje, vždy můžete problém obejít tím, že upustíte od používání RowBounds a implementujte SettingsBean třída (nebo podobná), kterou select tag bude mít jako parameterType , a který obsahuje pole pro offset a limit (nebo možná rowStart a rowEnd dává větší smysl pro Oracle a pak je můžete nastavit za běhu podle potřeby a dynamicky je interpolovat do SQL v okamžiku select se provede.
S trochou více kódu můžete ovládat chování přesně tak, jak chcete, prostřednictvím čistého dynamického SQL. Použil jsem podobný přístup s Mybatis a Postgres a fungovalo to dobře.
Takže byste implementovali svůj SettingsBean třídy s těmito poli a jejich gettry a settery a vaším select příkaz pak může vypadat nějak takto:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>