Dao・Entity・Sqlファイルの自動生成
doma-codegen-pluginは、データベースに接続しテーブルのメタデータからDao/Entity/Sqlファイルを自動作成するツールである。
自動生成時に、カラムを任意の方にマッピングさせたい場合は、以下の記事も合わせて参照すると良い。
olafnosuke.hatenablog.com
環境変数の設定
下記の環境変数を設定する
環境変数名 | 設定内容 |
---|---|
DATASOURCE_URL | jdbc:postgresql://localhost:ポート番号/データベース名 |
DATASOURCE_SCHEMA_NAME | ユーザー名 |
DATASOURCE_PASSWORD | パスワード |
DATASOURCE_SCHEMA_NAME | スキーマ名 |
※上記はJDBCドライバはPostgreSQLを想定
doma-codegen-pluginプラグインの設定
doma-codegen-pluginの設定はbuild.gradle
に記述する。
GitHub:doma-codegen-plugin
buildscript { repositories { mavenCentral() mavenLocal() maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } dependencies { classpath 'org.postgresql:postgresql:42.5.4' } } plugins { id 'org.seasar.doma.codegen' version '1.4.1' } domaCodeGen { dev { // 環境変数から接続先を取得 url = "$System.env.DATASOURCE_URL" user = "$System.env.DATASOURCE_USER_NAME" password = "$System.env.DATASOURCE_PASSWORD" schemaName = "$System.env.DATASOURCE_SCHEMA_NAME" // 自動生成ファイルの出力先パッケージ def outputPackage = 'jp.co.sample.persistence' // 自動生成対象外のテーブル名の正規表現を指定 ignoredTableNamePattern = 'hoge$' // Domaテンプレートを編集したため、自動生成時にそれを使用するように設定 // Daoに@org.seasar.doma.boot.ConfigAutowireableを付与するようにテンプレート編集 // Entityに@lombok.ToStringと@lombok.EqualsAndHashCodeを付与するようにテンプレート編集 templateDir = file('src/main/resources/doma/template') // Daoの設定 dao { packageName = "${outputPackage}.plain.dao" overwrite = true } // Entityの設定 entity { packageName = "${outputPackage}.plain.entity" overwrite = true useListener = false useMappedSuperclass = false useMetamodel = false entityPropertyClassNamesFile = file("$projectDir/codegen-enum-mapping.properties") } // SQLファイルの設定 sql { overwrite = true } } }
Dao/Entity/Sqlファイルの出力先を変更したい場合
build.gradle
のoutputPackage
の値を変更する
Dao/Entity/Sqlファイルの自動生成
Dao/Entity/Sqlファイルを同時に生成するコマンド
>gradlew domaCodeGenDevDao domaCodeGenDevEntity domaCodeGenDevSql
Daoのみ自動生成するコマンド
>gradlew domaCodeGenDevDao
Entityのみ自動生成するコマンド
>gradlew domaCodeGenDevEntity
Sqlファイルのみ自動生成するコマンド
>gradlew domaCodeGenDevSql
出力例
Daoの出力例
package jp.co.sample.persistence.plain.dao; import jp.co.sample.persistence.entity.Goods; import org.seasar.doma.Dao; import org.seasar.doma.Delete; import org.seasar.doma.Insert; import org.seasar.doma.Select; import org.seasar.doma.Update; import org.seasar.doma.boot.ConfigAutowireable; /** */ @ConfigAutowireable @Dao public interface GoodsDao { /** * @param id * @return the Goods entity */ @Select Goods selectById(Integer id); /** * @param entity * @return affected rows */ @Insert int insert(Goods entity); /** * @param entity * @return affected rows */ @Update int update(Goods entity); /** * @param entity * @return affected rows */ @Delete int delete(Goods entity); }
Entityの出力例
package jp.co.sample.persistence.plain.entity; import org.seasar.doma.Column; import org.seasar.doma.Entity; import org.seasar.doma.Id; import org.seasar.doma.Table; import lombok.ToString; import lombok.EqualsAndHashCode; import jp.co.sample.persistence.EntityContext; import jp.co.sample.persistence.listener.MyEntityListener; /** */ @Entity(listener = MyEntityListener.class) @Table(name = "goods") @ToString @EqualsAndHashCode public class Goods implements EntityContext { /** */ @Id @Column(name = "id") Integer id; /** */ @Column(name = "name") String name; /** * Returns the id. * * @return the id */ public Integer getId() { return id; } /** * Sets the id. * * @param id the id */ public void setId(Integer id) { this.id = id; } /** * Returns the name. * * @return the name */ public String getName() { return name; } /** * Sets the name. * * @param name the name */ public void setName(String name) { this.name = name; } }
Sqlファイルの出力例
select /*%expand*/* from goods where id = /* id */1