sql >> Databasteknik >  >> RDS >> Oracle

MyBatis RowBounds begränsar inte frågeresultat

Mybatis lämnar många saker till SQL driver som används, och det ser ut som det exakta beteendet kring RowBounds är en av dessa.

Se http://mybatis.github.io/mybatis-3/java-api.html, särskilt avsnittet som säger:

Olika förare kan uppnå olika effektivitetsnivåer i detta avseende. För bästa prestanda, använd resultatuppsättningstyperna SCROLL_SENSITIVE eller SCROLL_INSENSITIVE (med andra ord:notFORWARD_ONLY).

Standardinställningen är tydligen UNSET , men du kan försöka använda SCROLL_SENSITIVE som ResultSetType attribut i select tagga och se om det hjälper. Se http://mybatis.github.io/mybatis-3/sqlmap-xml.html för mer information om det.

Om det inte fungerar kan du alltid komma runt problemet genom att avstå från användningen av RowBounds och implementera en SettingsBean klass (eller liknande) som du select taggen skulle ta som en parameterType , och som innehåller fält för offset och limit (eller kanske rowStart och rowEnd mer vettigt för Oracle , och sedan kan du ställa in dessa vid körning efter behov och interpolera dem dynamiskt i SQL vid den tidpunkt select exekveras.

Medan lite mer kod får du styra beteendet precis som du vill genom ren dynamisk SQL. Jag har använt ett tillvägagångssätt som detta med Mybatis och Postgres och det har fungerat bra.

Så du skulle implementera din SettingsBean klass med dessa fält och deras getters och sättare, och ditt select uttalande kan då se ut ungefär så här:

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

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


  1. Hur UPPDATERA och VÄLJA samtidigt

  2. Hur REGEXP_REPLACE() fungerar i MariaDB

  3. hur deklarerar man %ROWTYPE för en variabel som är en svagt skriven SYS_REFCURSOR?

  4. Wordnet sqlite Synonymer och exempel