sql >> Base de Datos >  >> RDS >> Oracle

MyBatis RowBounds no limita los resultados de las consultas

Mybatis deja muchas cosas en manos del SQL driver que se está utilizando, y aparece el comportamiento exacto que rodea RowBounds es uno de esos.

Ver http://mybatis.github.io/mybatis-3/java-api.html, particularmente la sección que dice:

Diferentes conductores pueden lograr diferentes niveles de eficiencia en este sentido. Para obtener el mejor rendimiento, utilice tipos de conjuntos de resultados SCROLL_SENSITIVE o SCROLL_INSENSITIVE (en otras palabras:notFORWARD_ONLY).

Aparentemente, el valor predeterminado es UNSET , pero podría intentar usar SCROLL_SENSITIVE como ResultSetType atributo en el select etiquetar y ver si eso ayuda. Consulte http://mybatis.github.io/mybatis-3/sqlmap-xml.html para obtener más información al respecto.

Si eso no funciona, siempre puede solucionar el problema abandonando el uso de RowBounds e implementar un SettingsBean clase (o similar) que su select la etiqueta tomaría como parameterType , y que contiene campos para el offset y limit (o quizás rowStart y rowEnd tiene más sentido para Oracle , y luego puede configurarlos en tiempo de ejecución según sea necesario e interpolarlos dinámicamente en el SQL en el momento en que select se ejecuta.

Mientras que un poco más de código, puedes controlar el comportamiento exactamente como quieras a través de SQL dinámico puro. He usado un enfoque como este con Mybatis y Postgres y ha funcionado bien.

Entonces implementaría su SettingsBean clase con esos campos y sus getters y setters, y su select declaración podría ser algo como:

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

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