Spring+Doma+H2DBでWEBシステムを構築 その2


はじめに

前回同様ここを参考に作っていく。

Spring Tool Suite(STS)およびDoma Toolsの導入

開発する上で便利なので導入しておく

STSの導入

  1. ヘルプEclipseマーケットプレイスにてSTSを検索し、インストールする
  2. インストールが完了後Eclipseを再起動

Doma Toolsの導入

  1. ヘルプ新規ソフトウェアのインストール作業対象http://dl.bintray.com/domaframework/eclipse/を入力
  2. Doma Toolsにチェックを入れ次へ
  3. インストール完了後、Eclipseを再起動

簡単なSelectとInsert処理を作成

Entityの作成

  1. entityパッケージを作成
  2. entityパッケージの中にTestEntityを作成
TestEntity.java
package com.tharao.createdesigndocuments.entity;

import org.seasar.doma.Entity;
import org.seasar.doma.GeneratedValue;
import org.seasar.doma.GenerationType;
import org.seasar.doma.Id;

@Entity
public class TestEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer id;
    public String name;

}

Daoの作成

  1. daoパッケージを作成
  2. daoパッケージの中にTestEntityDaoを作成
TestEntityDao.java
package com.tharao.createdesigndocuments.dao;

import java.util.List;

import org.seasar.doma.Dao;
import org.seasar.doma.Insert;
import org.seasar.doma.Select;
import org.seasar.doma.boot.ConfigAutowireable;
import org.springframework.transaction.annotation.Transactional;

import com.tharao.createdesigndocuments.entity.TestEntity;

@ConfigAutowireable
@Dao
public interface TestEntityDao {

    @Select
    List<TestEntity> selectAll();

    @Insert
    @Transactional
    int insert(TestEntity reservation);

}

Serviceの作成

  1. serviceパッケージを作成
  2. serviceパッケージの中にTestServiceを作成
TestService.java
package com.tharao.createdesigndocuments.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.tharao.createdesigndocuments.dao.TestEntityDao;
import com.tharao.createdesigndocuments.entity.TestEntity;

@Service
@Transactional
public class TestService {

    @Autowired
    TestEntityDao dao;

    public List<TestEntity> getAllEntities() {
        return dao.selectAll();
    }

}

Controllerの作成

  1. controllerパッケージを作成
  2. controlleパッケージの中にTestControllerを作成
TestService.java
package com.tharao.createdesigndocuments.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.tharao.createdesigndocuments.entity.TestEntity;
import com.tharao.createdesigndocuments.service.TestService;

@RestController
public class TestController {

    @Autowired
    TestService service;

    @RequestMapping(value = "test", method = RequestMethod.GET)
    public List<TestEntity> getEntities() {
        return service.getAllEntities();
    }

}

SQLファイルの作成

  1. DaoインターフェイスのselectAllメソッドで右クリックしDomaJump to Slq Fileで作成
  2. selectAll.sqlを追加
selectAll.sql
select
    id
    ,name
from
    TestEntity
order by
    id asc

アプリケーションの作成

初期データを入れる

CreateDesignDocumentsApplication.java
package com.tharao.createdesigndocuments;

import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import com.tharao.createdesigndocuments.dao.TestEntityDao;
import com.tharao.createdesigndocuments.entity.TestEntity;

@SpringBootApplication
public class CreateDesignDocumentsApplication {

    public static void main(String[] args) {
        SpringApplication.run(CreateDesignDocumentsApplication.class, args);
    }

    @Autowired
    TestEntityDao testEntityDao;

    // 起動時にReservationDao#insertで初期データを投入する
    @Bean
    CommandLineRunner runner() {
        return args -> Arrays.asList("spring", "spring boot", "doma").forEach(s -> {
            TestEntity r = new TestEntity();
            r.name = s;
            testEntityDao.insert(r);
        });
    }

}

次にapplication.propertiesにSQLの方言を設定する

application.properties
doma.dialect=h2

apt(注釈処理)の設定

Doma公式のセットアップにならい、aptの設定をする。

  1. Eclipseのプロジェクトのプロパティを表示し、Javaコンパイラー注釈処理を選択する
  2. プロジェクト固有の設定を可能にするにチェックを入れる
  3. 生成されるソース・ディレクトリー.apt_generatedにする
  4. プロセッサー・オプションに以下を追加

    キー
    dao.subpackage impl
  5. Javaコンパイラー注釈処理ファクトリー・パスを選択する

  6. プロジェクト固有の設定を可能にするにチェックを入れる

  7. 注釈プロセッサーを含むプラグイン及びJARdomaのjarを追加しOKを押す

動かしてみる

http://localhost:8080/testにアクセスすると、無事データがJSON形式で表示された。

ハマったところ

SQLファイルをsrc/main/resourcesの下に作成したが、プロジェクトのJavaのビルド・パスでsrc/main/resources除外の設定に全ファイルが設定されており、DaoImplが作成されなかった。
src/main/resources除外をなしに設定したところ、無事にDaoImplが作成されコンパイルが通った。

参考にしたURL
Spring Boot + Doma2を使おう