sql >> Database >  >> RDS >> Oracle

MyBatis RowBounds beperkt de resultaten van zoekopdrachten niet

Mybatis laat veel dingen over aan het SQL driver dat wordt gebruikt, en het lijkt het exacte gedrag rondRowBounds is er zo een.

Zie http://mybatis.github.io/mybatis-3/java-api.html, met name de sectie die zegt:

Verschillende chauffeurs kunnen hierbij verschillende efficiëntieniveaus bereiken. Gebruik voor de beste prestaties resultaatsettypen SCROLL_SENSITIVE of SCROLL_INSENSITIVE (met andere woorden:notFORWARD_ONLY).

De standaard is blijkbaar UNSET , maar je zou kunnen proberen om SCROLL_SENSITIVE . te gebruiken als het ResultSetType attribuut in de select tag en kijk of dat helpt. Zie http://mybatis.github.io/mybatis-3/sqlmap-xml.html voor meer informatie hierover.

Als dat niet werkt, kun je het probleem altijd omzeilen door het gebruik van RowBounds te schrappen en implementeer een SettingsBean klasse (of vergelijkbaar) die je select tag zou nemen als een parameterType , en die velden bevat voor de offset en limit (of misschien rowStart en rowEnd zinvoller voor Oracle , en dan kunt u deze zo nodig tijdens runtime instellen en dynamisch interpoleren in de SQL op het moment dat de select wordt uitgevoerd.

Hoewel je wat meer code hebt, kun je het gedrag precies zo regelen als je wilt via pure dynamische SQL. Ik heb een dergelijke aanpak gebruikt met Mybatis en Postgres en het heeft goed gewerkt.

U zou dus uw SettingsBean . implementeren klasse met die velden en hun getters en setters, en je select verklaring kan er dan ongeveer zo uitzien:

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

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


  1. Lente 2011 PostgreSQL-conferenties, VS/Canada

  2. Isql gebruiken met een Connection String

  3. stel een leeg wachtwoord in voor PostgreSQL-gebruiker

  4. Hoe ASCII() werkt in MariaDB