[Spring Roo] 12. JPA Repositoryを使用したソートの実装

2014/02/23 2:39 AM
 

Spring Rooが生成したService、Repositoryには、ソート機能がない。しかし、実際のアプリケーションにはソート機能は必須だ。そこで今回は、一覧の検索にソート機能を実装する。

実現したいこと

Serviceの検索結果を、指定した順にソートされた状態で取得する。

具体的には、Accountの一覧で、ログインID順に表示する。

流れの確認

まず、Accountの一覧表示の流れを確認する。

AccountControllerのlistメソッドが呼ばれる。素の状態では、実装はAccountControllerクラスではなく、AccountController_Roo_Controller.ajに書かれている。

上記リストの6行目で、AccountServiceのfindAccountEntriesメソッドに、ページ数と1ページ当たりの行数を指定している。

テーブルの全件に対してソートするなら、ここで既にソート順が決まっていなければならないだろう。

では、AccountServiceを見てみる。

AccountService.javaは空で、素の状態では、AccountService_Roo_Service.ajに書かれている。

メソッド、List findAccountEntries(int firstResult, int maxResults)が呼ばれている。

実装である、AccountServiceImpl_Roo_Service.ajの該当のメソッドを見てみる。

AccountRepositoryのfindAllに与えられている引数org.springframework.data.domain.PageRequestは、org.springframework.data.domain.Pageableの実装。PageRequestのソースを見ると、Sortを持たせることができるようだ。

ということは、AccountServiceで、ソート情報を含んだ要求をしてあげればよいのではないか、と考えることができる。

Serviceへのメソッドの追加

まずは、やってみよう。Roo Shellを起動しておく。

AccountService.javaに、下記のようにSortを引数に加えたメソッドを追加する。

すると、実装クラスであるAccountServiceImpl.javaがエラーになるので、以下のようにメソッドを実装する。

これで、サービス以降のコーディングは完了。リポジトリは特に触らない。

Controllerの実装

次は、ソート順を指定するビューの方を変更しよう。といっても、話題が広がりすぎるのを避けるため、Controllerの部分のみにする。

AccountController.javaに、listメソッドを実装する。例によって、ITDファイル(AccountController_Roo_Controller.aj)からコピーして、以下のようなメソッドを追加する。

これで、Controllerの変更は完了。

動作確認

サーバーを起動して、アカウントの一覧を見てみよう。

変更前

038

変更後

037

ログインID順に並んでいることが分かる。

画面からのソート順指定について

今回はControllerで固定してしまったが、画面の要求からソート順を指定する方法がある。次回はその方法をRooで実装してみる。



コメントはまだありません

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを書く

WordPress Themes