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

JPAの基本を覚える (4/7)

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

■サーブレット作成とエンティティの利用

では、このMyDataEntityのデータを利用するサーブレットを作成しましょう。これも、com.tuyano.libroパッケージに作成をします。「MyDataEntityServlet.java」というファイル名でファイルを用意し、下のリスト欄のように記述をして下さい。

さあ、ようやくJPA経由でデータベースにアクセスする処理が出てきました。ここでは、2つのメソッドを用意してあります。initメソッドで初期化処理(ここでは、ダミーデータを作成しデータベースに保存しています)、そしてdoGetでデータベースからデータを取り出しています。

では、どのようにしてアクセスするのか、処理の流れを整理しましょう。まずは、データベースを利用するための準備部分についてです。


●データベース利用の準備●

1. EntityManagerFactoryの作成
protected EntityManagerFactory factory = 
    Persistence.createEntityManagerFactory("mydataentity-persistance");
最初に行うのは、EntityManagerFactoryインスタンスの作成です。これは、「エンティティマネージャ」と呼ばれるものを作成するためのファクトリクラスです。

Persistenceクラスの「createEntityManagerFactory」というメソッドを使い、引数にパーシスタンス・ユニット名を指定して呼び出します。これで、指定のパーシスタンス・ユニットを使ってEntityManagerFactoryインスタンスが作成されます。

2. EntityManagerの作成
EntityManager manager = factory.createEntityManager();
続いて、ファクトリからエンティティマネージャを作成します。このエンティティマネージャが、JPA利用の上でもっとも重要となるクラスです。エンティティマネージャは、EntityManagerFactoryの「createEntityManager」メソッドを呼び出して作成します。

このEntityManagerクラスに、データベースアクセスに関する各種の機能がまとめられています。それらを呼び出すことで、データベースを操作できるのです。

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

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

●プログラム・リスト●

package com.tuyano.libro;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class MyDataEntityServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    protected EntityManagerFactory factory = 
        Persistence.createEntityManagerFactory("mydataentity-persistance");

    @Override
    public void init() throws ServletException {
        super.init();
        EntityManager manager = factory.createEntityManager();
        try {
            manager.getTransaction().begin();
            manager.persist(
                new MyDataEntity("taro", "taro@yamada", "090-999-999")
            );
            manager.persist(
                new MyDataEntity("hanako", "hanako@flower", "080-888-888")
            );
            manager.persist(
                new MyDataEntity("sachiko", "sachiko@happy", "070-777-777")
            );
            manager.getTransaction().commit();
        } finally {
            manager.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {
        EntityManager manager = factory.createEntityManager();
        Query query = manager.createQuery("select i from MyDataEntity i");
        List list = query.getResultList();
        
        request.setAttribute("list", list);

        RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
        dispatcher.forward(request,response);
    }
}

※関連コンテンツ

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