始めに
Eclipse で開発する際の、Spring Boot + Doma2 + Gradle の初期設定でいつもハマっているので自分用にまとめる。
環境
- IDE:Eclipse pleiades-2020-03
- Spring Boot:2.3.1 RELEASE
- Doma:2.35.0
設定手順
(省略可)Spring Initializer でアプリケーションのひな型を作成する
Eclipse のプラグイン経由で作成していますが、ブラウザでも curl でもなんでもいいです。
Doma2 への依存関係を追加する
dependencies {
// ... 省略
implementation 'org.seasar.doma.boot:doma-spring-boot-starter:1.4.0'
annotationProcessor 'org.seasar.doma:doma-processor:2.35.0'
}
Eclipse の設定をする
build.gradle
の plugins に Eclipse 設定用のプラグインを追加する。
plugins {
// ...
id 'com.diffplug.eclipse.apt' version '3.23.0'
}
gradle eclipse
を実行し、設定を反映する。
$ ./gradlew eclipse
Starting a Gradle Daemon (subsequent builds will be faster)
BUILD SUCCESSFUL in 16s
5 actionable tasks: 5 executed
Eclipse の設定(注釈処理)が完了していることが確認できる。
簡単なAPIを作成する
https://github.com/domaframework/doma-spring-boot/tree/1.4.0の README に沿って、基本的に作成します。
Entityを定義する
package com.example.demo;
import org.seasar.doma.Entity;
import lombok.Data;
@Data
@Entity
public class Reservation {
private Integer id;
private String name;
}
Dao Interface を定義する
package com.example.demo;
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;
@ConfigAutowireable
@Dao
public interface ReservationDao {
@Select
public List<Reservation> selectAll();
@Insert
@Transactional
public int insert(Reservation reservation);
}
ReservationDao#selectAll
にカーソルを合わせ、右クリック > Doma > Jump to Sql File を押下すると、空のSQL ファイルが生成されます。(Eclipse に Doma Tools プラグインを追加している場合)
※ DOMA4019 が発生した場合は、[(補足)DOMA4019エラーが発生した場合](# DOMA4019エラーが発生した場合)を参照してください。
SQL ファイルにクエリーを書く
SELECT
id,
name
FROM reservation
ORDER BY name ASC
Service, Controller クラスを定義する
package com.example.demo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ReservationService {
@Autowired
private ReservationDao reservationDao;
public List<Reservation> selectAll() {
return reservationDao.selectAll();
}
public int insert(Reservation reservation) {
return reservationDao.insert(reservation);
}
}
package com.example.demo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ReservationController {
@Autowired
private ReservationService reservationService;
@GetMapping(path = "/")
public List<Reservation> selectAll() {
return reservationService.selectAll();
}
@PostMapping(path = "/")
public int insert(@RequestBody Reservation reservation) {
return reservationService.insert(reservation);
}
}
起動時にReservation
テーブルを作成する
HSQLDBという Java 製のインメモリ DB を使います。src/main/resources
直下にschema.sql
を配置しておくと、起動時にテーブル作成のスクリプトを流すことができます。
CREATE TABLE reservation (
id IDENTITY,
NAME VARCHAR(50)
);
APIの動作確認
POST(登録)
POST http://localhost:8080 HTTP/1.1
Content-Type: application/json
{
"id": 1,
"name": "サンプルA"
}
レスポンス;
HTTP/1.1 200
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sun, 12 Jul 2020 15:09:30 GMT
Connection: close
1
GET(全件取得)
GET http://localhost:8080 HTTP/1.1
レスポンス;
HTTP/1.1 200
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sun, 12 Jul 2020 15:10:20 GMT
Connection: close
[
{
"id": 1,
"name": "サンプルA"
}
]
(補足)DOMA4019 エラーが発生した場合
以下のように、SQL ファイルの絶対パスが期待通りではない、と DOMA4019 エラーが発生した場合について。
[DOMA4019] The file "META-INF/com/example/demo/ReservationDao/selectAll.sql" is not found in the classpath. The absolute path is "C:\Git\springboot-doma2-sample\bin\main\META-INF\com\example\demo\ReservationDao\selectAll.sql".
対象プロジェクト上で、右クリック > プロパティ > Java のビルドパス を修正します。
プロジェクトのデフォルト出力フォルダー ⇒ 特定の出力フォルダー(bin/main
)に修正。
終わりに
作成したアプリケーションは、リポジトリに格納しました。build.gradle
の全量を参照したい場合などに見てください。