- Docker がインストールされていれば、
startMySQL.sh
を実行することで起動できます。 - テスト用のテーブルとデータを用意済みなので replace-schema を実行してください。
./gradlew bootRun
member
テーブルから合計100件のレコードを取得するテスト。 PageSize を 31 にしているので、4ページに分割。
問題なし。
testPage =============================================================================
PageSize: 31, PageNum: 1, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, PageNum: 2, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, PageNum: 3, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, PageNum: 4, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 7
最後だけ AllRecordCount が 7 になってしまう。
testPageByOffset1 ====================================================================
PageSize: 31, Offset: 0, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, Offset: 31, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, Offset: 62, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, Offset: 93, AllPageCount: 1, AllRecordCount: 7, FetchRecords: 7
AllRecordCount は正しく取得できるが、4回目の取得で page.existsNextPage()
が true
を返してしまい、5回ループしてしまう。
testPageByOffset2 ====================================================================
PageSize: 31, Offset: 0, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, Offset: 31, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, Offset: 62, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 31
PageSize: 31, Offset: 93, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 7
PageSize: 31, Offset: 100, AllPageCount: 4, AllRecordCount: 100, FetchRecords: 0
PagingInvoker#deriveAllRecordCountByLastPage() で、 pagingBean.getFetchPageNumber()
が 0 を返しているため、 baseSize
が 0 になってしまうことが原因。
(挙動の確認のみ)
PagingInvoker#doPaging() 内のif文で、disablePagingCountLater()
指定有無によって分岐している。
disablePagingCountLater()
を指定していると、deriveAllRecordCountByLastPage()
は呼び出されないので、allRecordCount
は、正しく計算される。
ただし、毎回select count(*) 〜
が実行されてしまう。