Mybatis
SQL driver
に多くのことを任せます それが使用されており、RowBounds
を取り巻く正確な動作が表示されます それらの1つです。
http://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>