Criteria APIの利用 (2/6)
作成:2017-10-28 10:04
更新:2017-10-28 10:04
更新:2017-10-28 10:04
■Criteria API利用の基本手順
では、実際にCriteria APIを使ってデータベースからレコードをエンティティとして取得する手順について説明しましょう。
1. CriteriaBuilderの作成
2. CriteriaQueryの作成
3. Rootの取得
4. selectを実行
これで、全エンティティを取得するクエリー文に相当する処理ができました。後は、必要に応じて絞り込みなどのメソッドを呼び出していきます。
5. Queryの生成
6. Listを取得
では、実際の利用例を下にあげておきましょう。サーブレットのdoGetから、サンプルで作成したMyDataEntityを取得する例です。createQueryでJPQLを使ってQueryを作成するのに比べ、実行する文が多くなり面倒な感じもしますが、しかしクエリー文を完全に排除するのに成功していますね。
1. CriteriaBuilderの作成
CriteriaBuilder 変数 = manager.getCriteriaBuilder();まず最初に行うのは、CriteriaBuilderクラスのインスタンス作成です。CriteriaBuilderは、Criteria APIを利用するための専用クエリークラスを作成するためのビルダークラスです。
2. CriteriaQueryの作成
CriteriaQuery<エンティティ> 変数 =CriteriaBuilderから、CriteriaQueryクラスのインスタンスを作成します。CriteriaQueryは、Criteria APIを使ってクエリー文を生成するための専用クラスです。これは、引数にエンティティクラスのclassを指定します。
[CriteriaBuilder].createQuery( エンティティ.class );
3. Rootの取得
Root<エンティティ> 変数 = [CriteriaQuery] .from( エンティティ.class);CriteriaQueryから、Rootというクラスのインスタンスを取得します。これは、データベースアクセスのベースとなるものです。JPQLの「from エンティティ」部分に相当するオブジェクト、とイメージしておくと良いでしょう。
4. selectを実行
[CrieriaQuery].select( [Root] );CriteriaQueryのselectを呼び出します。引数にはRootを指定します。これは、JPQLの「select」句に相当するものを作成する作業です。これにより、「select from エンティティ」という基本部分が生成された、と考えて下さい(fromはRootにより用意されています)。
これで、全エンティティを取得するクエリー文に相当する処理ができました。後は、必要に応じて絞り込みなどのメソッドを呼び出していきます。
5. Queryの生成
Query 変数 = manager.createQuery( [CriteriaQuery] );CriteriaQueryから、Queryクラスのインスタンスを生成します。これで、createQueryなどを使う場合と同じところに戻ってきました。
6. Listを取得
List list = [Query] .getResultList();後は、QueryのgetResultListを呼び出してエンティティをListとして取り出すだけです。Queryが得られれば、後はこれまでやったやり方とまったく同じですね。
では、実際の利用例を下にあげておきましょう。サーブレットのdoGetから、サンプルで作成したMyDataEntityを取得する例です。createQueryでJPQLを使ってQueryを作成するのに比べ、実行する文が多くなり面倒な感じもしますが、しかしクエリー文を完全に排除するのに成功していますね。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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入門」に戻る