(4) Entity/DAO/Service/SQLの実装 [Spring][Doma]
はじめに
この回では、Domaを使用したDBを使用するプログラミングします。
実際にやることはSQLでTodoテーブルからデータを抽出するだけですが、
SpringやDomaを使用するためのルールや手順がちょこちょこあって少し長くなりますがやっていることは単純なのでさらっと記載します。
作成するクラス
作成するソースは下記の4つ!!
1.エンティティ(TodoEntity)クラスの作成
エンティティとは
DBの表データを格納する入れ物
エンティティの作成手順
- プロジェクト・エクスプローラーの右クリックでコンテキストメニューを開いてクラスを新規作成
- パッケージとクラス名を入力
作成する項目
Todoテーブルのカラムをエンティティに定義する
項目
項目 | 物理名(DB) | 属性 |
---|---|---|
ID | id | 数値 |
内容 | memo | 文字列 |
完了フラグ | doneFlg | ブーリアン |
実装内容
- クラスに「@Data」「@Entity」アノテーションを追加
@Entity … エンティティであることを指定するDomaのアノテーション
@Data … アクセサを自動でつけてくれる便利なlombokのアノテーション - 各項目を private で作成
- 識別子(主キー)の項目にDomaのアノテーション「@ID」を設定
実装例(TodoEntity.java)
package com.sbc.web2.entity; import org.seasar.doma.Entity; import org.seasar.doma.Id; import lombok.Data; @Data @Entity public class TodoEntity { /** ID */ @Id private Integer id; /** 内容 */ private String memo; /** 完了フラグ */ private boolean doneFlg; }
MEMO
2.DAO(TodoDao)クラスの作成
DAOとは
Data Access Objectの略。
DAOの作成手順
- クラスの新規作成を選択
- パッケージとクラスを入力
実装内容
- クラスに「@Dao」「@ConfigAutowireable」アノテーションを追加
@Dao … DAOであることを指定するDomaのアノテーション
@ConfigAutowireable … 生成される実装DAOクラスにアノテーションの設定 - 全件をSELECTするselectAllメソッドを作成
- selectAllメソッドに「@Select」アノテーションを追加
@Select … Select文であることを明示するDomaのアノテーション
実装例(TodoDao.java)
package com.sbc.web2.dao; import java.util.List; import org.seasar.doma.Dao; import org.seasar.doma.Select; import org.seasar.doma.boot.ConfigAutowireable; import com.sbc.web2.entity.TodoEntity; @Dao @ConfigAutowireable public interface TodoDao { @Select List<TodoEntity> selectAll(); }
MEMO
- Listは「java.util」のリストをインポートする
3.Todoテーブル検索SQL(selectAll.sql)の作成
- SQLファイルが無いと下記のようにエラーになってます
- エラーとなっているメソッドで右クリックして「Doma」→「Jump to SqlFile」をクリック
- SQLファイルの作成画面が表示されるのでデフォルトのまま完了
実装例(selectAll.sql)
SELECT id ,memo ,doneFlg FROM todo ;
- SQLファイルを保存するとエラーが解消されました
(解消されない場合はリフレッシュやプロジェクトのクリーンすることで改善される場合もあります)
4.サービス(TodoService)クラスの作成
サービスとは
ビジネスロジックをことです。SQLを実行する処理という認識でほぼOKかと。
サービスの作成手順
- もう3回目ですが新規にクラスを作成します
- こちらも3回目ですがパッケージとクラス名を入力
実装手順
- クラスに「@Service」「@Transactional」アノテーションを追加 @Service … サービスであることを定義するSpringのアノテーション
- Daoを「@Autowired」アノテーションでDIする @Autowired … DIであることを定義するSpringのアノテーション
- DAOのTodoテーブル検索SQLを実行する getTodoList()メソッドを作成
実装例(TodoService.java)
package com.sbc.web2.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.sbc.web2.dao.TodoDao; import com.sbc.web2.entity.TodoEntity; @Service @Transactional public class TodoService { @Autowired TodoDao todoDao; public List<TodoEntity> getTodoList(){ return todoDao.selectAll(); } }
おわりに
ソースは4本ありましたが、1個1個はシンプルなのでサクッと作成できました。
次回はAppControllerクラスから実際に処理を呼び出して動作確認を実施します。