Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

MyBatis RowBounds tidak membatasi hasil kueri

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>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengonversi angka/angka dalam kata-kata untuk mata uang INR (Rupee India) di Oracle PL/SQL

  2. Memasukkan ke Oracle Nested Table di Java

  3. Oracle Insert Select dengan pesanan berdasarkan

  4. Oracle:PADA PEMBARUAN KUNCI DUPLICATE

  5. Pernyataan Disiapkan dan setTimestamp di Oracle jdbc