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

MyBatis RowBounds begrænser ikke forespørgselsresultater

Mybatis lader mange ting være op til SQL driver der bliver brugt, og det ser ud til den nøjagtige adfærd omkring RowBounds er en af ​​dem.

Se http://mybatis.github.io/mybatis-3/java-api.html, især afsnittet, der siger:

Forskellige drivere er i stand til at opnå forskellige effektivitetsniveauer i denne henseende. For den bedste ydeevne skal du bruge resultatsættyperne SCROLL_SENSITIVE eller SCROLL_INSENSITIVE (med andre ord:notFORWARD_ONLY).

Standardindstillingen er tilsyneladende UNSET , men du kan prøve at bruge SCROLL_SENSITIVE som ResultSetType attribut i select tag og se om det hjælper. Se http://mybatis.github.io/mybatis-3/sqlmap-xml.html for mere information om det.

Hvis det ikke virker, kan du altid omgå problemet ved at droppe brugen af ​​RowBounds og implementer en SettingsBean klasse (eller lignende), som du select tag ville tage som en parameterType , og som indeholder felter for offset og limit (eller måske rowStart og rowEnd giver mere mening for Oracle , og så kan du indstille dem ved kørsel efter behov og interpolere dem dynamisk i SQL'en på det tidspunkt, select udføres.

Mens der er lidt mere kode, kan du styre adfærden præcis som du vil gennem ren dynamisk SQL. Jeg har brugt en fremgangsmåde som denne med Mybatis og Postgres og det har fungeret godt.

Så du ville implementere din SettingsBean klasse med disse felter og deres gettere og sættere, og dit select sætning kan så se noget i retning af:

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

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


  1. 2 måder at returnere rækker, der kun indeholder ikke-alfanumeriske tegn i MySQL

  2. Forespørgselstimeout i pg-promise

  3. Hvad er nyt i PostgreSQL 12

  4. Hvad er en større version alligevel?