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 http://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 http://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>