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

CRUDの基本 (2/5)

作成:2017-10-28 09:26
更新:2017-10-28 09:26

■Readの基本とクエリー(JPQL)利用

次に覚えるべきは、エンティティの取得(Read)でしょう。前回、createQueryQueryインスタンスを作り、getResultListで結果をListで取得する、という処理を行いましたね。

これは、エンティティの取得のためのものというわけではありません。SQLのクエリー文のようなものを使ってデータベースにアクセスをしていたのですね。これも、復習を兼ねて整理しておきましょう。

1. エンティマネージャの用意
EntityManager manager = factory.createEntityManager();
まず最初に、エンティティマネージャを用意します。これは、EntityManagerFactoryの「createEntityManager」メソッドを呼び出します。

2. Queryの作成
Query query = manager.createQuery(……クエリー文……);
EntityManagerクラスの「createQuery」メソッドを使ってQueryインスタンスを作成します。引数には、SQLクエリー文のようなものをテキストとして指定します。「ようなもの」というのは、正確にはSQLのクエリー文そのものではないからです。

JPAのQueryで使われるのは、「JPQL」というSQLクエリー文の親戚のようなものです。だいたいSQLクエリー文と同じような感じのもので、基本的に「select ~」でエンティティを検索する機能が中心となっています。

3. リストの取得
List 変数 = query.getResultList();
Queryの「getResultList」メソッドを呼び出すことで、クエリーの実行で得られるレコードを、エンティティのListとして取得します。

3'. エンティティの取得
Object 変数 query.getSingleResult();
複数のエンティティをまとめて取り出す場合の他に、「最初のエンティティを取り出す」ということもよくあります。この場合は、Queryの「getSingleResult」メソッドを使います。これにより、最初のエンティティだけが取り出されます。getResultListとあわせて覚えておくと良いでしょう。

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

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

●プログラム・リスト●

// 前回作成したサーブレットのdoGetメソッド
@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
    String id_str = request.getParameter("id");
    int id = 0;
    try {
        id = Integer.parseInt(id_str);
    } catch(NumberFormatException e){
        e.printStackTrace();
    }
    EntityManager manager = factory.createEntityManager();
    MyDataEntity entity = manager.find(MyDataEntity.class, id);
    
    request.setAttribute("entity", entity);

    RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
    dispatcher.forward(request,response);
}
※関連コンテンツ

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