Mybatis
lämnar många saker till SQL driver
som används, och det ser ut som det exakta beteendet kring RowBounds
är en av dessa.
Se http://mybatis.github.io/mybatis-3/java-api.html, särskilt avsnittet som säger:
Olika förare kan uppnå olika effektivitetsnivåer i detta avseende. För bästa prestanda, använd resultatuppsättningstyperna SCROLL_SENSITIVE eller SCROLL_INSENSITIVE (med andra ord:notFORWARD_ONLY).
Standardinställningen är tydligen UNSET
, men du kan försöka använda SCROLL_SENSITIVE
som ResultSetType
attribut i select
tagga och se om det hjälper. Se http://mybatis.github.io/mybatis-3/sqlmap-xml.html för mer information om det.
Om det inte fungerar kan du alltid komma runt problemet genom att avstå från användningen av RowBounds
och implementera en SettingsBean klass (eller liknande) som du select
taggen skulle ta som en parameterType
, och som innehåller fält för offset
och limit
(eller kanske rowStart
och rowEnd
mer vettigt för Oracle
, och sedan kan du ställa in dessa vid körning efter behov och interpolera dem dynamiskt i SQL vid den tidpunkt select
exekveras.
Medan lite mer kod får du styra beteendet precis som du vill genom ren dynamisk SQL. Jag har använt ett tillvägagångssätt som detta med Mybatis
och Postgres
och det har fungerat bra.
Så du skulle implementera din SettingsBean klass med dessa fält och deras getters och sättare, och ditt select
uttalande kan då se ut ungefär så här:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>