libro
www.tuyano.com
初心者のためのJava Persistence API入門

Criteria APIの利用 (2/6)

作成:2017-10-28 10:04
更新:2017-10-28 10:04

■Criteria API利用の基本手順

では、実際にCriteria APIを使ってデータベースからレコードをエンティティとして取得する手順について説明しましょう。

1. CriteriaBuilderの作成
CriteriaBuilder 変数 = manager.getCriteriaBuilder();
まず最初に行うのは、CriteriaBuilderクラスのインスタンス作成です。CriteriaBuilderは、Criteria APIを利用するための専用クエリークラスを作成するためのビルダークラスです。

2. CriteriaQueryの作成
CriteriaQuery<エンティティ> 変数 =
    [CriteriaBuilder].createQuery( エンティティ.class );
CriteriaBuilderから、CriteriaQueryクラスのインスタンスを作成します。CriteriaQueryは、Criteria APIを使ってクエリー文を生成するための専用クラスです。これは、引数にエンティティクラスのclassを指定します。

3. Rootの取得
Root<エンティティ> 変数 = [CriteriaQuery] .from( エンティティ.class);
CriteriaQueryから、Rootというクラスのインスタンスを取得します。これは、データベースアクセスのベースとなるものです。JPQLの「from エンティティ」部分に相当するオブジェクト、とイメージしておくと良いでしょう。

4. selectを実行
[CrieriaQuery].select( [Root] );
CriteriaQueryselectを呼び出します。引数にはRootを指定します。これは、JPQLの「select」句に相当するものを作成する作業です。これにより、「select from エンティティ」という基本部分が生成された、と考えて下さい(fromRootにより用意されています)。

これで、全エンティティを取得するクエリー文に相当する処理ができました。後は、必要に応じて絞り込みなどのメソッドを呼び出していきます。

5. Queryの生成
Query 変数 = manager.createQuery( [CriteriaQuery] );
CriteriaQueryから、Queryクラスのインスタンスを生成します。これで、createQueryなどを使う場合と同じところに戻ってきました。

6. Listを取得
List list = [Query] .getResultList();
後は、QuerygetResultListを呼び出してエンティティをListとして取り出すだけです。Queryが得られれば、後はこれまでやったやり方とまったく同じですね。

では、実際の利用例を下にあげておきましょう。サーブレットのdoGetから、サンプルで作成したMyDataEntityを取得する例です。createQueryでJPQLを使ってQueryを作成するのに比べ、実行する文が多くなり面倒な感じもしますが、しかしクエリー文を完全に排除するのに成功していますね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

// ※サーブレットに以下を追記
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
    EntityManager manager = factory.createEntityManager();
    CriteriaBuilder builder = manager.getCriteriaBuilder();
    CriteriaQuery<MyDataEntity> criteria_query =
            builder.createQuery(MyDataEntity.class);
    Root<MyDataEntity> root = criteria_query.from(MyDataEntity.class);
    [CriteriaQuery] .select(root);
    Query query = manager.createQuery(criteria_query);
    List list = query.getResultList();
    request.setAttribute("list", list);
    RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
    dispatcher.forward(request,response);
}
※関連コンテンツ

「初心者のためのJava Persistence API入門」に戻る