Mybatis menyerahkan banyak hal pada SQL driver yang sedang digunakan, dan tampaknya perilaku yang tepat di sekitarRowBounds adalah salah satunya.
Lihat https://mybatis.github.io/mybatis-3/Java-api.html, khususnya bagian yang mengatakan:
Pengemudi yang berbeda dapat mencapai tingkat efisiensi yang berbeda dalam hal ini. Untuk performa terbaik, gunakan jenis kumpulan hasil SCROLL_SENSITIVE atau SCROLL_INSENSITIVE (dengan kata lain:notFORWARD_ONLY).
Defaultnya tampaknya UNSET , tetapi Anda dapat mencoba menggunakan SCROLL_SENSITIVE sebagai ResultSetType atribut di select tag dan lihat apakah itu membantu. Lihat https://mybatis.github.io/mybatis-3/sqlmap-xml.html untuk info lebih lanjut tentang itu.
Jika itu tidak berhasil, Anda selalu dapat mengatasi masalah dengan membuang penggunaan RowBounds dan menerapkan SettingsBean kelas (atau serupa) yang select tag akan digunakan sebagai parameterType , dan yang berisi bidang untuk offset dan limit (atau mungkin rowStart dan rowEnd lebih masuk akal untuk Oracle , dan kemudian Anda dapat mengaturnya saat runtime sesuai kebutuhan dan menginterpolasinya secara dinamis ke dalam SQL pada saat select dijalankan.
Sementara sedikit lebih banyak kode, Anda dapat mengontrol perilaku persis seperti yang Anda inginkan melalui SQL dinamis murni. Saya telah menggunakan pendekatan seperti ini dengan Mybatis dan Postgres dan berhasil dengan baik.
Jadi, Anda akan menerapkan SettingsBean . Anda kelas dengan bidang-bidang itu dan pengambil dan penyetelnya, dan select . Anda pernyataan mungkin akan terlihat seperti:
<select
id="selectFoo"
parameterType="com.foo.bar.SettingsBean">
select *
from foo
where rownum >= #{rowStart}
and rownum < #{rowEnd}
</select>