12

私は現在、検索機能を使用して利用可能な製品のリストを表示する必要がある e コマース アプリケーションに取り組んでいます。

すべての検索と同様に、ここでもページネーションを実装する必要があります。

ORM ツールとして mybatis を使用し、基になるデータベースとして mysql を使用しています。

グーグルで検索すると、このタスクを達成する次の方法が見つかりました。

  1. クライアント側のページング : ここでは、データベースから検索条件に一致するすべての結果を一度にフェッチし、コード レベル (おそらくフロント エンド コード) でページ付けを処理する必要があります。

  2. サーバー側のページング: mysql を使用すると、結果セットの制限とオフセットを使用して、次のようなクエリを作成できます。 SELECT * FROM sampletable WHERE condition1>1 AND condition2>2 LIMIT 0,20

ここでは、ユーザーが検索結果をナビゲートしているときに新しいページを選択するたびに、オフセットと制限カウントを渡す必要があります。

誰にでも言えますか?

  1. ページングを実装するより良い方法はどれですか?
  2. mybatis は、上記の SQL クエリ (休止状態の基準 API など) に頼るだけでなく、ページングを実装するためのより良い方法をサポートしていますか?

すべての入力は非常に高く評価されています。ありがとう 。

4

5 に答える 5

10

マッパーを使用している場合 (生の SqlSession を使用するよりもはるかに簡単です)、制限を適用する最も簡単な方法は、RowBounds パラメーターをマッピング関数の引数リストに追加することです。次に例を示します。

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

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

これは、Volodymyr が投稿したリンクの「Using Mappers」の見出しの下に追記として言及されており、さらに強調することができます。

RowBounds インスタンスをメソッドに渡して、クエリ結果を制限することもできます。

RowBounds のサポートはデータベースによって異なる場合があることに注意してください。Mybatis のドキュメントは、Mybatis が適切なクエリを使用することを意味します。ただし、少なくとも Oracle の場合、これはデータベースへの非常に非効率的な繰り返し呼び出しによって処理されます。

于 2014-07-31T22:19:17.263 に答える
0

MyBatis Generator を使用している場合は、公式サイトorg.mybatis.generator.plugins.RowBoundsPluginから Row Bounds プラグインを試してください。selectByExampleこのプラグインは、RowBounds パラメーターを受け入れる新しいバージョンのメソッドを追加し ます。

于 2014-06-10T17:44:42.083 に答える