Springデータを使用したクエリ結果の並べ替え
1. 序章
このチュートリアルでは、クエリ結果を SpringDataで並べ替える方法を学習します。
まず、クエリと並べ替えを行うデータのスキーマを確認します。 次に、SpringDataを使用してそれを実現する方法について説明します。
始めましょう!
2. テストデータ
以下にいくつかのサンプルデータがあります。 ここでは表として表していますが、SpringDataでサポートされているデータベースのいずれかを使用して永続化することができます。
私たちが答えようとしている質問は、「航空会社のどの席を誰が占めているのか」ということです。 これをより使いやすくするために、座席番号で並べ替えます。
ファーストネーム | 苗字 | 座席番号 |
---|---|---|
ジル | スミス | 50 |
イブ | ジャクソン | 94 |
フレッド | Bloggs | 22 |
リッキ | ボビー | 36 |
シヤ | コリシ | 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のメソッド派生を使用することです。これにより、クエリはメソッド名とシグネチャから生成されます。
データを並べ替えるためにここで行う必要があるのは、メソッド名に、並べ替えるプロパティ名と方向(AscまたはDesc)とともにキーワードOrderByを含めることだけです。
この規則を使用して、座席番号の昇順で乗客を返すクエリを作成できます。
interface PassengerRepository extends JpaRepository<Passenger, Long> {
List<Passenger> findByOrderBySeatNumberAsc();
}
このキーワードをすべての標準のSpringDataメソッド名と組み合わせることもできます。
座席番号で姓およびの注文で乗客を検索する方法の例を見てみましょう。
List<Passenger> findByLastNameOrderBySeatNumberAsc(String lastName);
4.2. Sortパラメーターを使用した並べ替え
2番目のオプションは、並べ替えるプロパティ名と方向を指定する並べ替えパラメーターを含めることです。
List<Passenger> passengers = repository.findAll(Sort.by(Sort.Direction.ASC, "seatNumber"));
この場合、 findAll()メソッドを使用しており、呼び出すときにSortオプションを追加しています。
このパラメーターを新しいメソッド定義に追加することもできます。
List<Passenger> findByLastName(String lastName, Sort sort);
最後に、おそらくページングしている場合は、Pageableオブジェクトで並べ替えを指定できます。
Page<Passenger> page = repository.findAll(PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "seatNumber")));
5. 結論
Spring Dataを使用してデータを並べ替えるには、 OrderBy キーワードを使用したメソッドの派生、またはSortオブジェクトをメソッドパラメーターとして使用する2つの簡単なオプションがあります。
いつものように、この記事で使用されているコードは、GitHubでから入手できます。