ページの操作: LIMIT と OFFSET
多くの場合、データベースのデータは「ページ」で取得されます。それは、大きなリストを扱うのに便利だからです。最初に行 1 ~ 20 をクエリし、次に 21 ~ 40 をクエリします。
これは非常に一般的な状況であるため、SQL にはこの LIMIT と OFFSET 用の特別な演算子があります。
これらの演算子の類似物は Hibernate にも存在します。彼らだけがすぐにそれらを別のメソッドの形で作成することを決定しました。
- setFirstResult()はOFFSETに似ています。
- setMaxResults()はLIMIT に似ています。
これらのメソッドを使用してクエリを作成するのは非常に簡単です。41 から始まる 20 個のタスクを返すように要求するクエリを作成してみましょう。これは次のようになります。
Query<EmployeeTask> query = session.createQuery( “from EmployeeTask”, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
結果の並べ替え
クエリの結果文字列の一部を取得する方法を考え出しました。次に喫緊の課題は仕分けだ。
Hibernate での並べ替えは HQL クエリに直接記述されており、一般的に予想されるように見えます。
from Employee order by joinDate
並べ替え順序を変更したい場合は、asc と desc というよく知られた単語を使用する必要があります。例:
from Employee order by joinDate desc
SQL と同様に、複数のフィールドで並べ替えることができます。
from Employee order by joinDate desc, name asc
さらに、並べ替えフィールドをパラメータとして渡すことができます。
String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);
List<EmployeeTask> resultLIst = query.list();
HQL の関数
HQL の SQL と同じように、さまざまな関数を使用できます。
HQL がサポートする集計関数のリストは次のとおりです。
集計関数 | 説明 |
---|---|
カウント() | 行数を返します |
和() | 値の合計を計算します |
分() | 最小値を返します |
最大() | 最大値を返します |
平均() | 平均を返します |
覚えていただければ幸いですが、集計関数は group by と組み合わせて使用できる関数です。Group By は SQL とまったく同じように機能するため、繰り返しは行いません。
そしてもちろん、通常の機能。通常の関数を使用すると、すべてがはるかに簡単になります。これらの関数は SQL サーバーによって実行され、Hibernate はそれらを使用してクエリを正しく生成するだけで済みます。
したがって、Hibernate は SQL Server がサポートするすべての機能をサポートします。SQL サーバーのタイプは、SessionFactory を構成するときに sqlDialect パラメーターによって設定されます。
ユーザーに割り当てられたタスクの数を調べてみましょう。
String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();
GO TO FULL VERSION