読者です 読者をやめる 読者になる 読者になる

ゼロからはじめるWEBプログラミング入門

未経験者でも初心者でも関係なく、とにかくWEBサイトを作るところから始めるブログ!

(4) Entity/DAO/Service/SQLの実装 [Spring][Doma]

f:id:sbc-web:20170403235154j:plain


はじめに

この回では、Domaを使用したDBを使用するプログラミングします。

実際にやることはSQLでTodoテーブルからデータを抽出するだけですが、
SpringやDomaを使用するためのルールや手順がちょこちょこあって少し長くなりますがやっていることは単純なのでさらっと記載します。

作成するクラス

作成するソースは下記の4つ!!

  1. エンティティ(TodoEntity.java)
  2. DAO(TodoDao.java)
  3. Todoテーブル検索SQL(selectAll.sql)
  4. サービス(TodoService.java)


1.エンティティ(TodoEntity)クラスの作成

エンティティとは

DBの表データを格納する入れ物

エンティティの作成手順

f:id:sbc-web:20170401133704p:plain


  • パッケージとクラス名を入力

f:id:sbc-web:20170401133712p:plain


作成する項目

Todoテーブルのカラムをエンティティに定義する

項目
項目 物理名(DB) 属性
ID id 数値
内容 memo 文字列
完了フラグ doneFlg ブーリアン
実装内容
  1. クラスに「@Data」「@Entity」アノテーションを追加
     @Entity … エンティティであることを指定するDomaアノテーション
     @Data … アクセサを自動でつけてくれる便利なlombokのアノテーション
  2. 各項目を private で作成
  3. 識別子(主キー)の項目に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

f:id:sbc-web:20170401133721p:plain


2.DAO(TodoDao)クラスの作成

DAOとは

Data Access Objectの略。

DAOの作成手順

  • クラスの新規作成を選択

f:id:sbc-web:20170401134208p:plain


  • パッケージとクラスを入力

f:id:sbc-web:20170401134229p:plain


実装内容
  1. クラスに「@Dao」「@ConfigAutowireable」アノテーションを追加
     @Dao … DAOであることを指定するDomaアノテーション
     @ConfigAutowireable … 生成される実装DAOクラスにアノテーションの設定
  2. 全件をSELECTするselectAllメソッドを作成
  3. 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」のリストをインポートする

f:id:sbc-web:20170401134943p:plain


3.Todoテーブル検索SQL(selectAll.sql)の作成

  • SQLファイルが無いと下記のようにエラーになってます

f:id:sbc-web:20170401134949p:plain


  • エラーとなっているメソッドで右クリックして「Doma」→「Jump to SqlFile」をクリック

f:id:sbc-web:20170401134954p:plain


  • SQLファイルの作成画面が表示されるのでデフォルトのまま完了

f:id:sbc-web:20170401135003p:plain


実装例(selectAll.sql
SELECT
     id
    ,memo
    ,doneFlg
FROM
    todo
;


  • SQLファイルを保存するとエラーが解消されました
     (解消されない場合はリフレッシュやプロジェクトのクリーンすることで改善される場合もあります)

f:id:sbc-web:20170401135017p:plain


4.サービス(TodoService)クラスの作成

サービスとは

ビジネスロジックをことです。SQLを実行する処理という認識でほぼOKかと。

サービスの作成手順

  • もう3回目ですが新規にクラスを作成します

f:id:sbc-web:20170401135027p:plain


  • こちらも3回目ですがパッケージとクラス名を入力

f:id:sbc-web:20170401135033p:plain


実装手順
  1. クラスに「@Service」「@Transactional」アノテーションを追加  @Service … サービスであることを定義するSpringのアノテーション
  2. Daoを「@Autowired」アノテーションでDIする  @Autowired … DIであることを定義するSpringのアノテーション
  3. 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クラスから実際に処理を呼び出して動作確認を実施します。