REST風サービスをJavaEEで構築する方法10(DAO層編1)
前回はDBに接続するための設定方法を紹介した。
今回は、その接続設定を使用して、実際に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接続設定編)
接続するDB(MySQL)に下記のテーブルが作成されていること。
テーブル名:SAMPLE_TBL
No. | カラム名 | 型 | 桁 | 制約 | |
---|---|---|---|---|---|
1 | ID | CHAR | 4 | NOT NULL PRIMARY KEY | |
2 | NAME | VARCHAR | 128 | - |
Entityクラス、Dao層の実装を行う。また、Logic層・Api層・RESTクライアントの追加編集を行う。
<手順概要>
1.Entityクラスを作成する
2.DAO層のクラスを作成する
3.Logic層クラスを編集する
4.Api層のクラスを編集する
5.index.htmlを編集する
<手順詳細>
1.Entityクラスを作成する
読み書きの対象となるテーブルのカラム構成に対応したEntityクラスを作成する。
プロジェクトツリー上で右クリックし、[新規]>[Javaクラス]を選択する。
表示されたダイアログにのクラス名に「SampleEntity」(※)、パッケージに「lab.moonmt.SampleRest.entity」(※)と設定し、【終了(F)】ボタンを押下する。
(※)任意の名前をつけることができる。
作成されたクラスを下記の様に編集する。
package lab.moonmt.SampleRest.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity //...(1) @Table(name="SAMPLE_TBL") //...(2) public class SampleEntity implements Serializable { @Id private String id; //...(3) private String name; //...(3) 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) | @Entityアノテーションを使用して、Entityクラスであることを宣言している。 |
(2) | @Tableアノテーションを使用して、このクラスに対応するテーブル名が「SAMPLE_TBL」であることを宣言している。クラス名とテーブル名を一致させれば、本設定は不要である。 |
(3) | テーブルのカラム名に対応したプロパティを定義している。 |
2.DAO層のクラスを作成する
プロジェクトツリー上で右クリックし、[新規]>[Javaクラス]を選択する。
表示されたダイアログのクラス名に「SampleDao」(※)、パッケージに「lab.moonmt.SampleRest.dao」(※)と設定し、【終了(F)】ボタンを押下する。
(※)任意の名前をつけることができる。
作成されたクラスを下記の様に編集する。
package lab.moonmt.SampleRest.dao; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.criteria.CriteriaQuery; import lab.moonmt.SampleRest.entity.SampleEntity; @Stateless public class SampleDao { @PersistenceContext private EntityManager entityManager; //...(1) //挿入 public void create(SampleEntity sampleEntity){ entityManager.persist(sampleEntity); //...(2) } //更新(上書き) public void update(SampleEntity sampleEntity){ entityManager.merge(sampleEntity); //...(3) } //削除 public void delete(SampleEntity sampleEntity){ entityManager.remove(entityManager.merge(sampleEntity)); //...(4) } //検索(IDによる検索) public SampleEntity find(String id){ return entityManager.find(SampleEntity.class, id); //...(5) } //全件取得 public List<SampleEntity> getAll(){ //(6) CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery(); cq.select(cq.from(SampleEntity.class)); return entityManager.createQuery(cq).getResultList(); } }
ソースコード解説
番号 | 説明 |
---|---|
(1) | @PersistenceContextアノテーションで「エンティティマネージャ」をインジェクト(DI)している。この「エンティティマネージャ」に前回設定した接続情報が適用されている。 |
(2) | EntityManagerクラスの「persist」メソッドを使用して、テーブルに対して挿入処理を行っている。 |
(3) | EntityManagerクラスの「merge」メソッドを使用して、テーブルに対して更新処理を行っている。 |
(4) | EntityManagerクラスの「merge」メソッドと「remove」メソッドを使用して、テーブルに対して削除処理を行っている。 |
(5) | EntityManagerクラスの「find」メソッドを使用して、テーブルに対して検索処理を行っている。 |
(6) | 全件取得する際の定型処理を行っている。 |
3.Logic層クラスを編集する
REST風サービスをJavaEEで構築する方法08(Logic層編)で作成した「SampleLogic」を編集して、手順2で作成したDAO層クラスのメソッドを呼び出す。
package lab.moonmt.SampleRest.logic; import java.util.List; import javax.ejb.EJB; import javax.ejb.Stateless; import lab.moonmt.SampleRest.dao.SampleDao; import lab.moonmt.SampleRest.entity.SampleEntity; @Stateless public class SampleLogic { @EJB private SampleDao sampleDao; //...(1) public void postMethod(String id, String name){ SampleEntity se = new SampleEntity(id, name); sampleDao.create(se); //...(2) } public void putMethod(String id, String name){ SampleEntity se = new SampleEntity(id, name); sampleDao.update(se); //...(2) } public void deleteMethod(String id){ SampleEntity se = new SampleEntity(id, null); sampleDao.delete(se); //...(2) } public SampleEntity getMethod(String id){ return sampleDao.find(id); //...(2) } public List<SampleEntity> getAllMethod(){ return sampleDao.getAll(); //...(2) } }
4.Api層のクラスを編集する
REST風サービスをJavaEEで構築する方法08(Logic層編)で編集した「SampleApi」クラスを追加編集し、Logic層クラスのメソッドを呼び出す。
package lab.moonmt.SampleRest.api; import java.util.List; import javax.ejb.EJB; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import lab.moonmt.SampleRest.entity.SampleEntity; import lab.moonmt.SampleRest.logic.SampleLogic; import net.arnx.jsonic.JSON; @Path("sampleApi") public class SampleApi { @EJB private SampleLogic sampleLogic; @GET @Path("getSample") public String getSampleMethod( @QueryParam("id") String id ){ SampleEntity se = sampleLogic.getMethod(id); return JSON.encode(se); } @GET @Path("getAllSample") public String getAllSampleMethod(){ List<SampleEntity> seList = sampleLogic.getAllMethod(); return JSON.encode(seList); } @POST @Path("postSample") public String postSampleMethod( @FormParam("id") String id, @FormParam("name") String name ){ sampleLogic.postMethod(id, name); return "success"; } @PUT @Path("putSample") public String putSampleMethod( @FormParam("id") String id, @FormParam("name") String name ){ sampleLogic.putMethod(id, name); return "success"; } @DELETE @Path("deleteSample/{id}") public String deleteSampleMethod( @PathParam("id") String id ){ sampleLogic.deleteMethod(id); return "success"; } }
5.index.htmlを編集する
REST風サービスをJavaEEで構築する方法05(パラメータの受け取り編)で編集した、index.htmlファイルを追加編集する。
<!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- jQueryライブラリの読み込み --> <script src='js/libs/jquery-1.11.2.min.js'></script> <!-- RESTクライアントの記述 --> <script> $(function(){ $('#btnGet').on('click', function(){ $.ajax({ type: "GET", url: "http://localhost:8080/SampleRest/webresources/sampleApi/getSample", data: {"id":"0001"}, success: function(data){ alert(data); } }); }); $('#btnGetAll').on('click', function(){ $.ajax({ type: "GET", url: "http://localhost:8080/SampleRest/webresources/sampleApi/getAllSample", success: function(data){ alert(data); } }); }); $('#btnPost').on('click', function(){ $.ajax({ type: "POST", url: "http://localhost:8080/SampleRest/webresources/sampleApi/postSample", data: {"id":"8003","name":"bbbbbbbb"}, success: function(data){ alert(data); } }); }); $('#btnPut').on('click', function(){ $.ajax({ type: "PUT", url: "http://localhost:8080/SampleRest/webresources/sampleApi/putSample", data: {"id":"8003","name":"cccccccc"}, success: function(data){ alert(data); } }); }); $('#btnDelete').on('click', function(){ $.ajax({ type: "DELETE", url: "http://localhost:8080/SampleRest/webresources/sampleApi/deleteSample/8003", success: function(data){ alert(data); } }); }); }); </script> </head> <body> <input type="button" value="GETメソッド" id="btnGet" /><br> <input type="button" value="GET(all)メソッド" id="btnGetAll" /><br> <input type="button" value="POSTメソッド" id="btnPost" /><br> <input type="button" value="PUTメソッド" id="btnPut" /><br> <input type="button" value="DELETEメソッド" id="btnDelete" /> </body> </html>
<動作確認>
プロジェクトを実行し、ブラウザに表示されたボタンを押下し、DB操作が行われたことを確認する。
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ログ編)
<お勧め書籍>