Oracle
 sql >> Database >  >> RDS >> Oracle

MyBatis RowBounds non limita i risultati delle query

Mybatis lascia molte cose al SQL driver che viene utilizzato e sembra il comportamento esatto che circonda RowBounds è uno di quelli.

Vedi http://mybatis.github.io/mybatis-3/java-api.html, in particolare la sezione che dice:

Driver diversi sono in grado di raggiungere diversi livelli di efficienza in questo senso. Per ottenere le migliori prestazioni, utilizza i tipi di set di risultati SCROLL_SENSITIVE o SCROLL_INSENSITIVE (in altre parole:notFORWARD_ONLY).

L'impostazione predefinita è apparentemente UNSET , ma potresti provare a utilizzare SCROLL_SENSITIVE come ResultSetType attributo nel select tagga e vedi se questo aiuta. Vedi http://mybatis.github.io/mybatis-3/sqlmap-xml.html per maggiori informazioni al riguardo.

Se non funziona, puoi sempre aggirare il problema abbandonando l'uso di RowBounds e implementa un SettingsBean classe (o simile) che il tuo select tag prenderebbe come parameterType e che contiene i campi per l'offset e limit (o forse rowStart e rowEnd ha più senso per Oracle , quindi puoi impostarli in fase di esecuzione secondo necessità e interpolarli dinamicamente nell'SQL nel momento in cui select viene eseguito.

Mentre un po 'più di codice, puoi controllare il comportamento esattamente come desideri tramite puro SQL dinamico. Ho usato un approccio come questo con Mybatis e Postgres e ha funzionato bene.

Quindi implementeresti il ​​tuo SettingsBean classe con quei campi e i loro getter e setter e il tuo select l'istruzione potrebbe quindi assomigliare a:

<select
  id="selectFoo"
  parameterType="com.foo.bar.SettingsBean">

select *
from foo
where rownum >= #{rowStart}
  and rownum < #{rowEnd}
</select>