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ログ編)
<お勧め書籍>