Mybatis SQL driverに多くのことを任せます それが使用されており、RowBoundsを取り巻く正確な動作が表示されます それらの1つです。
https://mybatis.github.io/mybatis-3/java-api.html、特に次のセクションを参照してください:
この点で、さまざまなドライバーがさまざまなレベルの効率を達成できます。最高のパフォーマンスを得るには、結果セットタイプのSCROLL_SENSITIVEまたはSCROLL_INSENSITIVE(つまり、notFORWARD_ONLY)を使用します。
デフォルトは明らかにUNSET 、ただし、SCROLL_SENSITIVEを使用してみることができます ResultSetTypeとして selectの属性 タグを付けて、それが役立つかどうかを確認します。詳細については、http://mybatis.github.io/mybatis-3/sqlmap-xml.htmlを参照してください。
それでも問題が解決しない場合は、RowBoundsの使用をやめることでいつでも問題を回避できます。 SettingsBeanを実装します selectのクラス(または同様のもの) タグはparameterTypeとして使用されます 、およびoffsetのフィールドが含まれています およびlimit (またはおそらくrowStart およびrowEnd Oracleの方が理にかなっています 、次に、必要に応じて実行時にそれらを設定し、select時にSQLに動的に補間することができます。 実行されます。
コードはもう少し増えますが、純粋な動的SQLを使用して、必要に応じて動作を正確に制御できます。私はMybatisでこのようなアプローチを使用しました およびPostgres そしてそれはうまくいきました。
したがって、 SettingsBeanを実装します これらのフィールドとそのゲッターとセッター、およびselectを使用したクラス その場合、ステートメントは次のようになります。
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>