sql >> Databáze >  >> RDS >> Oracle

MyBatis RowBounds neomezuje výsledky dotazů

Mybatis nechává mnoho věcí na SQL driver který se používá, a zdá se, že se přesně chová kolemRowBounds je jedním z nich.

Viz http://mybatis.github.io/mybatis-3/java-api.html, zejména část, která říká:

Různí řidiči jsou v tomto ohledu schopni dosáhnout různé úrovně účinnosti. Nejlepšího výkonu dosáhnete, když použijete typy sady výsledků SCROLL_SENSITIVE nebo SCROLL_INSENSITIVE (jinými slovy:ne FORWARD_ONLY).

Výchozí hodnota je zřejmě UNSET , ale můžete zkusit použít SCROLL_SENSITIVE jako ResultSetType atribut v select tag a uvidíme, jestli to pomůže. Více informací naleznete na http://mybatis.github.io/mybatis-3/sqlmap-xml.html.

Pokud to nefunguje, vždy můžete problém obejít tím, že upustíte od používání RowBounds a implementujte SettingsBean třída (nebo podobná), kterou select tag bude mít jako parameterType , a který obsahuje pole pro offset a limit (nebo možná rowStart a rowEnd dává větší smysl pro Oracle a pak je můžete nastavit za běhu podle potřeby a dynamicky je interpolovat do SQL v okamžiku select se provede.

S trochou více kódu můžete ovládat chování přesně tak, jak chcete, prostřednictvím čistého dynamického SQL. Použil jsem podobný přístup s Mybatis a Postgres a fungovalo to dobře.

Takže byste implementovali svůj SettingsBean třídy s těmito poli a jejich gettry a settery a vaším select příkaz pak může vypadat nějak takto:

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

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


  1. Nasazení a škálování PostgreSQL v13 s ClusterControl 1.8.2

  2. Složitý dotaz Postgres

  3. Jaký je správný název pro tabulku přidružení (vztah mnoho k mnoha)

  4. Funkce IIf() vs. Příkaz IIf().