Oracle
 sql >> Baza danych >  >> RDS >> Oracle

MyBatis RowBounds nie ogranicza wyników zapytań

Mybatis pozostawia wiele rzeczy w gestii SQL driver który jest używany i wygląda dokładnie tak samo, jak otaczające RowBounds jest jednym z nich.

Zobacz http://mybatis.github.io/mybatis-3/java-api.html, w szczególności sekcję, która mówi:

Różni kierowcy są w stanie osiągnąć różne poziomy wydajności w tym zakresie. Aby uzyskać najlepszą wydajność, użyj typów zestawów wyników SCROLL_SENSITIVE lub SCROLL_INSENSITIVE (innymi słowy:notFORWARD_ONLY).

Wartość domyślna to najwyraźniej UNSET , ale możesz spróbować użyć SCROLL_SENSITIVE jako ResultSetType atrybut w select tag i zobacz, czy to pomaga. Zobacz http://mybatis.github.io/mybatis-3/sqlmap-xml.html, aby uzyskać więcej informacji na ten temat.

Jeśli to nie zadziała, zawsze możesz obejść ten problem, rezygnując z używania RowBounds i zaimplementuj SettingsBean klasę (lub podobną), którą select tag przyjmie jako parameterType , który zawiera pola dla offset i limit (lub może rowStart i rowEnd bardziej sensowne dla Oracle , a następnie można je ustawić w czasie wykonywania zgodnie z potrzebami i interpolować je dynamicznie do SQL w momencie select jest wykonywany.

Podczas gdy trochę więcej kodu, możesz kontrolować zachowanie dokładnie tak, jak chcesz, za pomocą czystego dynamicznego SQL. Użyłem takiego podejścia z Mybatis i Postgres i działa dobrze.

Więc zaimplementujesz swój SettingsBean klasę z tymi polami i ich getterami i seterami, a twój select oświadczenie może wtedy wyglądać mniej więcej tak:

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

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź maksymalną liczbę kolejnych lat dla każdego identyfikatora w tabeli (Oracle SQL)

  2. ORA-00054:zasób zajęty i pozyskiwanie z określonym NOWAIT lub upłynął limit czasu

  3. Uruchomić 2 zapytania jednocześnie w Oracle SQL Developer?

  4. Jak korzystać z PBKDF2 w Oracle 12c?

  5. SET SQLBLANKLINES:Jak zezwolić na puste wiersze w SQLcl i SQL*Plus