Mybatis оставя много неща на SQL driver който се използва и изглежда точното поведение околоRowBounds е един от тях.
Вижте https://mybatis.github.io/mybatis-3/java-api.html, особено секцията, която казва:
Различните драйвери са в състояние да постигнат различни нива на ефективност в това отношение. За най-добра производителност използвайте типове набори от резултати SCROLL_SENSITIVE или SCROLL_INSENSITIVE (с други думи:notFORWARD_ONLY).
По подразбиране очевидно е UNSET , но можете да опитате да използвате SCROLL_SENSITIVE като ResultSetType атрибут в select маркирайте и вижте дали това помага. Вижте https://mybatis.github.io/mybatis-3/sqlmap-xml.html за повече информация по въпроса.
Ако това не работи, винаги можете да заобиколите проблема, като се откажете от използването на RowBounds и имплементирайте SettingsBean клас (или подобен), който select маркерът ще приеме като parameterType , и който съдържа полета за offset и limit (или може би rowStart и rowEnd има повече смисъл за Oracle , а след това можете да ги зададете по време на изпълнение според нуждите и да ги интерполирате динамично в SQL в момента на select се изпълнява.
Макар и малко повече код, вие можете да контролирате поведението точно както искате чрез чист динамичен SQL. Използвах подход като този с Mybatis и Postgres и работи добре.
Така че бихте внедрили своя SettingsBean клас с тези полета и техните getters и setters, и вашия select тогава изявлението може да изглежда нещо като:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>