2013-07-07 82 views
6

我目前正在研究一個電子商務應用程序,我必須展示使用搜索功能的可用產品列表。如何做mybatis分頁?

就像每個搜索一樣,我必須在這裏實現分頁。

我使用mybatis作爲我的ORM工具和mysql作爲底層數據庫。

我周圍的谷歌搜索發現下面的方法來完成這項任務:

  1. 客戶端分頁 :在這裏,我將有相匹配的搜索條件來獲取所有從數據庫中結果一舉和處理在我的代碼級分頁(可能是葉末結束代碼)。

  2. 服務器端分頁: 與MySQL我可以使用限制和抵消的結果集的構造類似的查詢: SELECT * FROM sampletable WHERE condition1>1 AND condition2>2 LIMIT 0,20

在這裏,我必須通過抵消和限制每次用戶在搜索結果中導航時選擇一個新頁面計數。

誰能告訴,

  1. ,這將是實現分頁更好的辦法?
  2. mybatis是否支持更好的方式來實現分頁,而不僅僅依賴上面的SQL查詢(如hibernate標準API)。

任何輸入都高度appreaciated。 謝謝。

回答

6

我自己在sql查詢中使用LIMIT的第二個opion。

但是有一些方法支持使用RowBounds類進行分頁。 這在mybatis文檔中有詳細描述here

注意要使用正確的結果集類型。

+0

感謝您的回答讓。我會盡快檢查。 – Shinchan

+0

爲此歡呼。這是我正在尋找的。 – Shinchan

4

如果您使用映射器(比使用原建SqlSession容易得多),申請限制的最簡單的方法是將一個RowBounds參數映射函數的參數列表,例如:

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

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

這是在the link Volodymyr posted幾乎不假思索地提到,下一個使用映射器的標題,並可以使用一些更強調:

你也可以傳遞一個RowBounds實例的方法來限制查詢結果。

請注意,對RowBounds的支持可能因數據庫而異。 Mybatis文檔意味着Mybatis將處理使用適當的查詢。但是,至少對於Oracle來說,這是通過對數據庫進行非常低效的重複調用來處理的。

+0

Rowbound是DB層分頁還是ORM層分頁? – arvindwill

2

分頁有兩種類型,物理和邏輯

  • 邏輯的手段,首先檢索所有數據,然後在內存中進行排序
  • 物理意味着數據庫級別的子集選擇

默認的MyBatis分頁是合乎邏輯的......因此當你選擇一個海量數據庫時,例如100GB的blob,rowbound方法仍然會很慢

這樣lution是使用物理分頁