ページネーションプラグイン
MyBatis-Plus のページネーションプラグイン PaginationInnerInterceptor は、強力なページネーション機能を提供し、様々なデータベースをサポートしており、ページネーションクエリをシンプルかつ効率的に行うことができます。
サポートされているデータベース
PaginationInnerInterceptor は、以下を含む幅広いデータベースをサポートしています:
OceanBase
GaussDB
DB2
HSQL
Firebird
Cubird
RedShift
Derby
DuckDB
Vastbase
GoldenDB
人大金仓
神州通用
虚谷
优炫
星瑞格 リストに必要なデータベースが含まれていない場合は、Pull Request を通じて追加をリクエストできます。
設定方法
Spring Boot プロジェクトでは、Java 設定を使用してページネーションプラグインを追加できます:
@Configuration@MapperScan("scan.your.mapper.package")public class MybatisPlusConfig {
/** * ページネーションプラグインを追加 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 複数のプラグインを設定する場合、ページネーションは最後に追加することを忘れないでください // 複数のデータソースがある場合は特定のタイプを設定する必要はありませんが、それ以外の場合は具体的な DbType を設定することをお勧めします return interceptor; }}プロパティ紹介
PaginationInnerInterceptor は、ページネーション動作をカスタマイズするために以下のプロパティを提供します:
| プロパティ名 | 型 | デフォルト値 | 説明 |
|---|---|---|---|
| overflow | boolean | false | 総ページ数を超えた場合に処理するかどうか |
| maxLimit | Long | 1ページあたりのページネーション件数制限 | |
| dbType | DbType | データベースタイプ | |
| dialect | IDialect | ダイアレクト実装クラス |
単一のデータベースタイプを使用する場合は、dbType を設定することをお勧めします
カスタム Mapper メソッドでのページネーションの使用
以下の方法で Mapper メソッドでページネーションを使用できます:
IPage<UserVo> selectPageVo(IPage<?> page, Integer state);// またはカスタムページネーションクラスMyPage selectPageVo(MyPage page);// または List を返すList<UserVo> selectPageVo(IPage<UserVo> page, Integer state);対応する XML 設定:
<select id="selectPageVo" resultType="xxx.xxx.xxx.UserVo"> SELECT id,name FROM user WHERE state=#{state}</select>戻り値の型が IPage の場合、入力パラメータの IPage を null にすることはできません。一時的にページネーションを行わない場合は、IPage を初期化する際に size パラメータに 0 より小さい値を渡すことができます。 戻り値の型が List の場合、入力パラメータの IPage は null にすることができますが、入力パラメータの IPage.setRecords(返される List) を手動で設定する必要があります。 XML で page から値を取得する必要がある場合は、
page.プロパティを使用して取得する必要があります。
その他の注意事項
- countSql を生成する際、left join したテーブルが where 条件に参加しない場合、そのテーブルは最適化されて除外されます。left join を含むすべての SQL で、テーブルとフィールドにエイリアスを付けることをお勧めします。
- 複数のプラグインを使用する場合、COUNT SQL の実行が不正確になる問題を避けるために、ページネーションプラグインをプラグイン実行チェーンの最後に配置してください。
Page クラス
Page クラスは IPage クラスを継承し、シンプルなページネーションモデルを実装しています。独自のページネーションモデルを実装する必要がある場合は、Page クラスを継承するか、IPage クラスを実装できます。
| プロパティ名 | 型 | デフォルト値 | 説明 |
|---|---|---|---|
| records | List<T> | emptyList | クエリデータリスト |
| total | Long | 0 | クエリリストの総レコード数 |
| size | Long | 10 | 1ページあたりの表示件数、デフォルトは 10 |
| current | Long | 1 | 現在のページ |
| orders | List<OrderItem> | emptyList | ソートフィールド情報 |
| optimizeCountSql | boolean | true | COUNT SQL の自動最適化 |
| optimizeJoinOfCountSql | boolean | true | COUNT SQL の自動最適化で join クエリ部分を削除するかどうか |
| searchCount | boolean | true | count クエリを実行するかどうか |
| maxLimit | Long | 1ページあたりのページネーション件数制限 | |
| countId | String | XML カスタム count クエリの statementId |
これらの設定と使用方法を通じて、MyBatis-Plus で簡単にページネーションクエリを実装し、アプリケーションのパフォーマンスとユーザーエクスペリエンスを向上させることができます。