スポンサーリンク

SpringBoot*doma-genでエンティティ/Daoを自動生成する手順

投稿日:2021年2月11日 更新日:

doma-genでエンティティ/Daoを自動生成する手順

<<doma-genの作成方法の公式ドキュメントはこちらです>>
https://doma-gen.readthedocs.io/en/2.6.1/gen/

build.gradleの基本設定

build.gradleにdoma-genタスクを定義する。

dependencies {
	// doma-gen設定
	domaGenRuntime 'org.seasar.doma:doma-gen:2.6.1'
	domaGenRuntime 'org.postgresql:postgresql:9.3-1100-jdbc41'
	domaGenRuntime 'mysql:mysql-connector-java'
}

// doma-gen設定
task gen {
	group = 'doma-gen'
	doLast {
		ant.taskdef(resource: 'domagentask.properties',
				classpath: configurations.domaGenRuntime.asPath)
		ant.gen(url: 'jdbc:mysql://localhost:3306/happy_library', user: 'springuser', password: 'xxx') {
			entityConfig()
			daoConfig()
			sqlConfig()
		}
	}
}

生成物のカスタマイズ方法

ant.gen(url: 'jdbc:mysql...'	      <= トップレベルパラメータ
      entityConfig(パラメータ: '値')	<= エンティティクラスの生成に関する設定
			daoConfig(パラメータ: '値')	  <= Dao インタフェースの生成に関する設定
			sqlConfig(パラメータ: '値')	  <= SQL ファイルの生成に関する設定

上記メソッドに対して引数にオプションを渡すことで、自動生成のカスタマイズができます。カスタマイズ可能項目は、公式ドキュメントを参照してください。少なくとも下記は指定する必要があるでしょう。

Noオプション項目
1 対象スキーマを指定するトップレベルパラメータ.schemaName
2出力先を指定するdestDir
3パッケージ名を指定するpackageName
		ant.gen(url: 'jdbc:mysql://localhost:3306/happy_library?serverTimezone=JST', user: 'springuser', password: 'xxx', schemaName: 'happy_library') {
			entityConfig(destDir: 'src/main/java', packageName: 'com.springhack.happylibrary.entity')
			daoConfig(destDir: 'src/main/java', packageName: 'com.springhack.happylibrary.dao')
			sqlConfig(destDir: 'src/main/resources')

対象スキーマ、出力先、パッケージ名を指定した例。

課題 @Daoに@ConfigAutowirerableを付与

課題 @EntityのサフィックスにEntityを付与

genタスクを実行する

Gradleメニュー>Tasks>doma-gen>gen を押すと、自動生成されます。

doma-gen genタスク実行時のエラー

[DOMAGEN0013] プロパティ[driverClassName]が表すクラス[com.mysql.jdbc.Driver]が見つかりません。

原因:genタスク実行時にJDBCドライバーが見つからなかった。

対策:genタスク実行時の依存性にJDBCドライバーを追加する。データベースに対するドライバークラスが適切確認する。

修正前

dependencies {
	runtimeOnly 'mysql:mysql-connector-java'

	// doma-gen設定
	domaGenRuntime 'org.seasar.doma:doma-gen:2.6.1'
	domaGenRuntime 'org.postgresql:postgresql:9.3-1100-jdbc41'
}

修正後

dependencies {
	runtimeOnly 'mysql:mysql-connector-java'

	// doma-gen設定
	domaGenRuntime 'org.seasar.doma:doma-gen:2.6.1'
	domaGenRuntime 'mysql:mysql-connector-java'
}

データベースがMySQLなのに、PostgreSQLのドライバーが指定されてい田のを修正した例。

[DOMAGEN9001] 例外が発生しました。java.sql.SQLException: The server time zone value 'xxxx' is unrecognized or represents more than one time zone.

原因

修正前

ant.gen(url: 'jdbc:mysql://localhost:3306/happy_library', user: 'springuser', password: 'xxx') {

修正後

ant.gen(url: 'jdbc:mysql://localhost:3306/happy_library?serverTimezone=JST', user: 'springuser', password: 'xxx') {

?serverTimezone=JST でtimezoneを明示する。

なぜエンティティ/Daoを自動生成するか?

業務システムをはじめ、実案件ではテーブル数は最低でも10、100いくようなこともよくあります。そのときに、各テーブルに対するEntityクラスとDaoインターフェースを手で作っていたら、工数がかかりすぎ、非効率です。

また、自動生成をすることによって、同一手順で安定した品質のEntityクラスとDaoインターフェースを手に入れることができます。

Doma2に限らず、JPAでもMybatisを使う場合でも、Entityクラスの作成は必須です。

自動生成は最初の設定は難しいですが、その後の開発体験にはとても大きなプラスになります。複数人で開発している場合は、全メンバーの開発体験が向上するので、必ずプロジェクトに適用させましょう。

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-未分類

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.