Mybatis
menyerahkan banyak hal pada SQL driver
yang sedang digunakan, dan tampaknya perilaku yang tepat di sekitarRowBounds
adalah salah satunya.
Lihat http://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 http://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>