ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

「doma-spring-boot-starter」を使ってSpringBootとDomaの連携を楽にする

JavaのDBアクセスフレームワーク「Doma2」にSpringBootと連携し自動で設定してくれる「doma-spring-boot-starter」が追加されました。

今までは独自にDoma用のクラスを作成し連携していましたが、それをする必要がなくなり導入と設定が楽になりました。


github.com

doma-spring-boot-starter」の適用概略

1.build.gradleに「https://oss.sonatype.org/content/repositories/snapshots」のリポジトリを追加する

2.build.gradleに「org.seasar.doma.boot:doma-spring-boot-starter」の依存を追加する

3.application.propertiesに必要であればdoma用の設定を追加する

doma-spring-boot-starter」を使うことでdoma設定クラスが不要になります。
application.propertiesdoma.namingを追加することで、@EntityNamingTypeの定義が不要になります。

サンプルコード

build.gradle

repositories {
	mavenCentral()
	// 追記
	maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}

dependencies {
	// 追記
	compile('org.seasar.doma.boot:doma-spring-boot-starter:1.0.2')
	// 削除
	//compile('org.seasar.doma:doma:2.6.2')
}

src/main/resources/application.properties

# DB
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:test_db
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

# DOMA
doma.dialect=ORACLE
doma.naming=SNAKE_LOWER_CASE

src/main/java/com.example.dao.EmpDao

package com.example.dao;

import java.util.List;

import org.seasar.doma.Dao;
import org.seasar.doma.Select;
import org.seasar.doma.boot.ConfigAutowireable;

import com.example.entity.Emp;

@ConfigAutowireable
@Dao
public interface EmpDao {

	@Select
	List<Emp> findAll();
}

src/main/java/com.example.entity.Emp

package com.example.entity;

import java.util.Date;

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

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

	@Id
	public String empNo;

	public String empNm;
}

src/main/java/com.example.web.TestController

package com.example.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.example.dao.EmpDao;
import com.example.entity.Emp;

@Controller
public class TestController {

	@Autowired
	private EmpDao empDao;

	@RequestMapping("/test")
	public String index() {

		List<Emp> list = empDao.findAll();
		for (Emp emp : list) {
			System.out.println(emp.empNo);
		}

		return "test/test";
	}