Mybatis
laisse beaucoup de choses au SQL driver
qui est utilisé, et il apparaît le comportement exact entourant RowBounds
en fait partie.
Voir http://mybatis.github.io/mybatis-3/java-api.html, en particulier la section qui dit :
Différents conducteurs sont capables d'atteindre différents niveaux d'efficacité à cet égard. Pour de meilleures performances, utilisez les types d'ensembles de résultats SCROLL_SENSITIVE ou SCROLL_INSENSITIVE (en d'autres termes :notFORWARD_ONLY).
La valeur par défaut est apparemment UNSET
, mais vous pouvez essayer d'utiliser SCROLL_SENSITIVE
comme ResultSetType
attribut dans le select
tag et voir si cela aide. Voir http://mybatis.github.io/mybatis-3/sqlmap-xml.html pour plus d'informations à ce sujet.
Si cela ne fonctionne pas, vous pouvez toujours contourner le problème en abandonnant l'utilisation de RowBounds
et implémentez un SettingsBean classe (ou similaire) que votre select
la balise prendrait comme parameterType
, et qui contient des champs pour le offset
et limit
(ou peut-être rowStart
et rowEnd
avoir plus de sens pour Oracle
, puis vous pouvez les définir au moment de l'exécution selon vos besoins et les interpoler dynamiquement dans le SQL au moment où le select
est exécuté.
Avec un peu plus de code, vous pouvez contrôler le comportement exactement comme vous le souhaitez grâce à du SQL dynamique pur. J'ai utilisé une approche comme celle-ci avec Mybatis
et Postgres
et cela a bien fonctionné.
Donc, vous implémenteriez votre SettingsBean class avec ces champs et leurs getters et setters, et votre select
l'instruction pourrait alors ressembler à :
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>