Springデータを使用したクエリ結果の並べ替え
1. 前書き
このチュートリアルでは、Spring Dataを使用してlearn how to sort query resultsに移動します。
まず、クエリと並べ替えを行うデータのスキーマを見ていきます。
次に、そのSpringデータを実現する方法について詳しく説明します。
始めましょう!
2. テストデータ
以下にいくつかのデータ例を示します。 ここではテーブルとして表していますが、Spring Dataでサポートされているデータベースのいずれかを使用して永続化できます。
私たちが答えたい質問は「誰が航空会社のどの席を占有しているのですか?」ですが、それをよりユーザーフレンドリーにするために、席番号でソートしたいと思います。
ファーストネーム |
苗字 |
座席番号 |
Jill |
スミス |
50 |
Eve |
ジャクソン |
94 |
Fred |
Bloggs |
22 |
リッキ |
ボビー |
36 |
Siya |
コリシ |
85 |
3. ドメイン
Spring Data Repositoryを作成するには、ドメインクラスとIDタイプを指定する必要があります。
ここでは、乗客をJPAエンティティとしてモデル化しましたが、MongoDBドキュメントやその他のモデルの抽象化と同じくらい簡単にモデル化できました。
@Entity
class Passenger {
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Basic(optional = false)
@Column(nullable = false)
private String firstName;
@Basic(optional = false)
@Column(nullable = false)
private String lastName;
@Basic(optional = false)
@Column(nullable = false)
private int seatNumber;
// constructor, getters etc.
}
4. Springデータによる並べ替え
Spring Dataを使用した並べ替えには、いくつかのオプションがあります。
4.1. OrderByメソッドキーワードを使用した並べ替え
1つのオプションは、Spring Dataのメソッド派生を使用することです。これにより、クエリはメソッド名とシグネチャから生成されます。
All we need to do here to sort our data is include the keyword OrderBy in our method nameと、並べ替えるプロパティ名および方向(AscまたはDsc)。
この規則を使用して、座席番号の昇順で乗客を返すクエリを作成できます。
interface PassengerRepository extends JpaRepository {
List findByOrderBySeatNumberAsc();
}
また、このキーワードをすべての標準Spring Dataメソッド名と組み合わせることができます。
座席番号で姓andの注文で乗客を検索する方法の例を見てみましょう。
List findByLastNameOrderBySeatNumberAsc(String lastName);
4.2. Sortパラメータを使用した並べ替え
並べ替えるプロパティ名と方向を指定するOur second option is to include a Sort parameter:
List passengers = repository.findAll(Sort.by(Sort.Direction.ASC, "seatNumber"));
この場合、findAll()メソッドを使用し、呼び出すときにSortオプションを追加しています。
このパラメーターを新しいメソッド定義に追加することもできます。
List findByLastName(String lastName, Sort sort);
最後に、おそらくページングしている場合は、Pageableオブジェクトでソートを指定できます。
Page page = repository.findAll(PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "seatNumber")));
5. 結論
OrderByキーワードを使用したメソッド派生、またはメソッドパラメータとしてSortオブジェクトを使用して、SpringDataでデータを並べ替える簡単なオプションが2つあります。
いつものように、コードover on GitHubを見つけることができます。