LoginSignup
0
0

【簡単設定】IntellijでSpringBoot(Java) + Gradle + MySQL + Doma2のプロジェクトを作る

Last updated at Posted at 2023-10-01

はじめに

SpringBoot + MySQLでアプリを作る際、DBにアクセスするときに使用するORマッパーはいつもSpring Data JPAをだったのですが、個人的に使いにくいなと感じることが多かったんです。。。
しかし、Doma2というORマッパーが良いという事を聞き、今回使ってみようと思いました。
その際、初期設定あたりで色々つまづいたところがあったので、今回はそこを中心に執筆しようと思います。(Controller, Serviceの実装は省きます。)

GradleでDoma2を導入する記事がなかなか少なかったので、参考になれば幸いです!!
※本当はkotlinでしたかったのですが、つまづいたのでJavaで解説します(笑)

環境

SpringBoot 2.7.16
Java 11
MySQL 8.0.32
IntelliJ IDEA 2021.3.2

SpringBootのプロジェクトは事前にSpring Initializr等で準備してください

Doma2とは

  • JavaのDBアクセスフレームワーク
  • 注釈処理を使用して コンパイル時 にコードの生成やコードの検証を行う
  • データベース上のカラムの値を振る舞いを持った Java オブジェクトにマッピングできる
  • 2-way SQL と呼ばれる SQL テンプレートを利用できる

build.gradleにdoma2の設定を追加する

まずはbuild.gradleに以下の設定を追加しましょう

build.gradle
plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.16'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    // ↓追加
	id 'org.seasar.doma.compile' version '1.1.0'
}

dependencies {
    // ↓追加
	implementation 'org.seasar.doma.boot:doma-spring-boot-starter:1.4.0'
    // ↓追加
	annotationProcessor 'org.seasar.doma:doma-processor:2.35.0'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	runtimeOnly 'com.mysql:mysql-connector-j'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

追加したらビルドを行いましょう

MySQLの設定

application.yml(propertiesでも可)に、以下の設定を追加しましょう

application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost
    username: root
    password:
      initialization-mode: always
  sql:
    init:
      mode: always

doma:
  dialect: ORACLE
  naming: SNAKE_LOWER_CASE

Daoインターフェースの作成

続いて、SQLを発行してくれるDAOを作成しましょう

TodoDao.java
package com.example.doma.infrastructure.dao.todo;

import com.example.doma.domain.todo.Todo;
import org.seasar.doma.Dao;
import org.seasar.doma.Insert;
import org.seasar.doma.Select;
import org.seasar.doma.Update;
import org.seasar.doma.boot.ConfigAutowireable;

import java.util.List;

@ConfigAutowireable
@Dao
public interface TodoDao {
  @Select
  List<Todo> findAll(String name);
}

SQLファイルの作成

「findAll」に対応するSQLクエリを作成しましょう
SQLファイルの配置場所ですが、以下のディレクトリに配置し、名前も合わせる必要があります

src/main/resources/META-INF/...(Daoファイルまでのディレクトリ)/findAll.sql

今回は全件取得するSQLを発行したいので、以下のSQLをファイル内に書きましょう

select * from テーブル名;

エンティティの作成

以下のようにエンティティを作成しましょう

TodoEntity.java
package com.example.doma.domain.todo;

import lombok.Data;
import org.seasar.doma.*;

import java.util.Date;

// application.propertiesの「doma.naming」で指定済みなので不要
//@Entity(naming = NamingType.SNAKE_LOWER_CASE)
@Data
@Entity
public class Todo {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  public int id;

  private String name;

  private Date createTimestamp;

  private Date updateTimestamp;
}

設定は以上です!
あとはRestでもなんでも良いので、Controller、Serviceを作成して、ServiceでDaoのfindAllを呼べばSQLを実行することができます。

不備等あればコメントいただけますと幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0