REST風サービスをJavaEEで構築する方法11(DAO層編2)

前回はDao層の基本的な実装方法を紹介した。
今回はSQLを使用したDB操作の方法を紹介する。

<前提条件>
下記の記事を読了していること。
REST風サービスをJavaEEで構築する方法01(導入編)
REST風サービスをJavaEEで構築する方法02(雛形プロジェクト編)
REST風サービスをJavaEEで構築する方法03(RESTクライアント編)
REST風サービスをJavaEEで構築する方法04(各メソッド編)
REST風サービスをJavaEEで構築する方法05(パラメータの受け取り編)
REST風サービスをJavaEEで構築する方法06(JSON返却編1)
REST風サービスをJavaEEで構築する方法07(JSON返却編2)
REST風サービスをJavaEEで構築する方法08(Logic層編)
REST風サービスをJavaEEで構築する方法09(DB接続設定編)
REST風サービスをJavaEEで構築する方法10(DAO層編1)

<全体像から見た位置づけ>
EntityクラスとDao層の追加編集を行う。

<手順概要>
1.Entityクラスに使用するSQLを記述する
2.DAO層クラスにSQLを使用してDB操作するメソッドを追加する
3.Logic層・Api層・index.htmlを編集する

<手順詳細>
1.Entityクラスに使用するSQLを記述する
REST風サービスをJavaEEで構築する方法10(DAO層編1)で作成した「SampleEntity」を追加編集し、使用するSQL文を記述する。

package lab.moonmt.SampleRest.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedNativeQuery;
import javax.persistence.Table;

@Entity
@Table(name="SAMPLE_TBL")
@NamedNativeQuery(                                                  //...(1)
        name="findByName",                                          //...(2)
        query="select id, name from SAMPLE_TBL where name=?param",  //...(3)
        resultClass=SampleEntity.class)                             //...(4)
public class SampleEntity implements Serializable {
    
    @Id
    private String id;
    
    private String name;
    
    public SampleEntity(){}
    
    public SampleEntity(String id, String name){
        
        this.setId(id);
        this.setName(name);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


ソースコード解説

番号 説明
(1) @NamedNativeQueryアノテーションSQLを記述することを宣言している。
(2) name要素を使用して、SQLにつける名前を設定している(ここでは「findByName」と名付けている)。この名前により後述するDao層から呼び出す。
(3) query要素を使用して、SQL文を設定している。「?param」は実行時に設定する変数である。
(4) resultClass要素を使用して、SQLを使用して取得した結果を格納するクラスを設定している。

2.DAO層クラスにSQLを使用してDB操作するメソッドを追加する
REST風サービスをJavaEEで構築する方法10(DAO層編1)で作成した「SampleDao」を追加編集し、Entityクラスに記述したSQL文を読み込み実行するメソッドを追加する。

package lab.moonmt.SampleRest.dao;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
import lab.moonmt.SampleRest.entity.SampleEntity;

@Stateless
public class SampleDao {
    
    @PersistenceContext
    private EntityManager entityManager;
    
    //挿入
    public void create(SampleEntity sampleEntity){
        
        entityManager.persist(sampleEntity);
    }
    
    //更新(上書き)
    public void update(SampleEntity sampleEntity){
        
        entityManager.merge(sampleEntity); 
    }
    
    //削除
    public void delete(SampleEntity sampleEntity){
        
        entityManager.remove(entityManager.merge(sampleEntity));
    }
    
    //検索(IDによる検索)
    public SampleEntity find(String id){
        
        return entityManager.find(SampleEntity.class, id);
    }
    
    //全件取得
    public List<SampleEntity> getAll(){

        CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
        cq.select(cq.from(SampleEntity.class));
        return entityManager.createQuery(cq).getResultList();
    }

    //名前による検索
    public List<SampleEntity> findByName(String name){
        
        Query query = entityManager.createNamedQuery("findByName");     //...(1)
        query.setParameter("param", name);                              //...(2)
        
        return query.getResultList();                                   //...(3)
    }

}


ソースコード解説

番号 説明
(1) エンティティマネージャの「createNamedQuery」メソッドを使用して、Entityクラスに記述したSQL文を読み込む。引数はEntityクラスでSQL文につけた名前を指定する。
(2) SQL文中の変数に対して値を設定している。
(3) SQL文を実行し、結果を呼び出し元に返却している。

3.Logic層・Api層・index.htmlを編集する
手順2で追加したメソッドが呼び出される様に、Logic層・Api層クラスおよびindex.htmlファイルを編集する。
詳細は割愛する(前回の手順3,4,5を参照)。

Enjoy Programing!!


<関連記事>
REST風サービスをJavaEEで構築する方法01(導入編)
REST風サービスをJavaEEで構築する方法02(雛形プロジェクト編)
REST風サービスをJavaEEで構築する方法03(RESTクライアント編)
REST風サービスをJavaEEで構築する方法04(各メソッド編)
REST風サービスをJavaEEで構築する方法05(パラメータの受け取り編)
REST風サービスをJavaEEで構築する方法06(JSON返却編1)
REST風サービスをJavaEEで構築する方法07(JSON返却編2)
REST風サービスをJavaEEで構築する方法08(Logic層編)
REST風サービスをJavaEEで構築する方法09(DB接続設定編)
REST風サービスをJavaEEで構築する方法10(DAO層編1)
・REST風サービスをJavaEEで構築する方法11(DAO層編2)[本記事]
REST風サービスをJavaEEで構築する方法12(DAO層編3)
REST風サービスをJavaEEで構築する方法13(SQLログ編)


<お勧め書籍>

わかりやすいJavaEEウェブシステム入門
JavaEEに関して基本的なことが分かり易く記述されている。
JavaEEに関する最初の1冊としてお勧めである。
Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava
「金魚本」の愛称を持つJavaEEの教科書的な書籍である。
JavaEEを腰を据えて学びたい人にお勧めする1冊!!