2013-07-07 22 views
6

Obecnie pracuję nad aplikacją e-commerce, w której muszę wyświetlić listę dostępnych produktów za pomocą funkcji wyszukiwania.Jak zrobić paginację z mybatis?

Tak jak przy każdym wyszukiwaniu, muszę zaimplementować paginację tutaj.

Używam mybatis jako mojego narzędzia ORM i mysql jako bazowej bazy danych.

Googling wokół znalazłem następujące sposoby realizacji tego zadania:

  1. Client Side stronicowania : Tutaj będę musiał pobrać wszystkie wyniki z bazy danych spełniających kryteria wyszukiwania w jednym skoku i obsługi paginacja na poziomie mojego kodu (prawdopodobnie kod końca z przodu).

  2. Server stronicowania Side: z MySQL można używać Limit i przesunięcie wynikowego skonstruować kwerendę jak: SELECT * FROM sampletable WHERE condition1>1 AND condition2>2 LIMIT 0,20

Tutaj, muszę zdać offsetu i limitu liczyć za każdym razem, gdy użytkownik wybierze nową stronę podczas nawigacji w wynikach wyszukiwania.

Może ktoś powiedzieć,

  1. co będzie lepszym sposobem wdrożenia stronicowania?
  2. Czy mójbatis obsługuje lepszy sposób implementacji stronicowania niż tylko poleganie na powyższych zapytaniach SQL (takich jak API Kryteriów hibernacji).

Wszelkie dane wejściowe są bardzo doceniane. Dzięki.

Odpowiedz

6

Ja sam używam drugiej opcji z LIMITem w zapytaniu sql.

Ale istnieje szereg metod, które obsługują paginację za pomocą klasy RowBounds. Jest to dobrze opisane w dokumentacji mybatis here

Należy zwrócić uwagę na prawidłowy typ zestawu wyników do użycia.

+0

Dzięki za odpowiedź. Sprawdzę to wkrótce. – Shinchan

+0

Wiwaty za to. Tego właśnie szukałem. – Shinchan

4

Jeśli używasz odwzorowujących (znacznie łatwiejsze niż przy użyciu surowców SqlSessions), najprostszym sposobem, aby zastosować limit jest dodanie parametru RowBounds do listy argumentów Funkcja mapowania użytkownika, np:

// without limit 
List<Foo> selectFooByExample(FooExample ex); 

// with limit 
List<Foo> selectFooByExample(FooExample ex, RowBounds rb); 

Jest wspomniano prawie jak musztarda po obiedzie w the link Volodymyr posted, pod Korzystanie odwzorowujących pozycji, a przydałby się większy nacisk:

można także przekazać instancję RowBounds metody, aby ograniczyć wyniki zapytania.

Należy pamiętać, że obsługa funkcji RowBounds może się różnić w zależności od bazy danych. Dokumentacja Mybatis sugeruje, że Mybatis zadba o to, by użyć odpowiedniego zapytania. Jednak przynajmniej w przypadku Oracle jest to obsługiwane przez bardzo nieefektywne wywołania wielokrotne w bazie danych.

+0

Czy Rowbound to stronicowanie warstwy DB lub stronicowanie warstwy ORM? – arvindwill

2

paginacja posiada dwa rodzaje, fizyczne i logiczne

  • logiczne środki, aby pobrać wszystkie dane najpierw następnie posortować je w pamięci
  • fizyczna oznacza poziom bazie podzbiór wybierz

paginacji domyślny mybatis jest logiczne ... więc gdy wybierzesz masywną bazę danych, np. 100 GB obiektów typu blob, metoda wiersza będzie nadal bardzo powolna

tak lution jest użycie fizycznego paginacji

  • można zrobić własną drogę przez mybatis interceptor
  • lub za pomocą plugins wstępnie wykonane przez kogoś innego
Powiązane problemy