Skip to content

6.3. jOOQコード生成

6.3.1. 概要

jOOQはデータベーススキーマから型安全なJavaクラスを自動生成します。Flywayでマイグレーションを適用した後、jOOQ codegenを実行して常にスキーマとコードを同期します。

Flywayマイグレーション実行 → DBスキーマ反映 → jOOQ codegen → Javaクラス生成

6.3.2. Mavenプラグイン設定

xml
<plugin>
  <groupId>org.jooq</groupId>
  <artifactId>jooq-codegen-maven</artifactId>
  <version>${jooq.version}</version>
  <executions>
    <execution>
      <id>jooq-codegen</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>generate</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <jdbc>
      <driver>org.postgresql.Driver</driver>
      <url>jdbc:postgresql://localhost:5432/flowin</url>
      <user>flowin</user>
      <password>flowin1234</password>
    </jdbc>
    <generator>
      <database>
        <name>org.jooq.meta.postgres.PostgresDatabase</name>
        <inputSchema>public</inputSchema>
        <includes>.*</includes>
        <excludes>flyway_schema_history</excludes>
      </database>
      <target>
        <packageName>com.tienipia.flowin.jooq</packageName>
        <directory>target/generated-sources/jooq</directory>
      </target>
      <generate>
        <records>true</records>
        <daos>false</daos>
        <pojos>false</pojos>
        <fluentSetters>true</fluentSetters>
        <javaTimeTypes>true</javaTimeTypes>
      </generate>
    </generator>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>${postgresql.version}</version>
    </dependency>
  </dependencies>
</plugin>

6.3.3. コード生成設定原則

設定理由
recordstrueRecordクラス生成(CRUDに活用)
daosfalseDAO自動生成を不使用(直接Repositoryを作成)
pojosfalsePOJOを不使用(別途DTOを使用)
fluentSetterstrueメソッドチェーンをサポート
javaTimeTypestruejava.time型を使用(Timestampの代わり)
excludesflyway_schema_historyFlyway内部テーブルを除外

6.3.4. 生成されたコードの管理

  • 生成場所:target/generated-sources/jooq/
  • 生成されたコードはGitにコミットしません。 ビルド時に常に再生成します。
  • .gitignoreに以下を含めます:
txt
target/generated-sources/

6.3.5. 生成コード構造

target/generated-sources/jooq/
└── com/tienipia/flowin/jooq/
    ├── DefaultCatalog.java
    ├── Public.java           # スキーマ参照
    ├── Keys.java             # PK、FK定義
    ├── Tables.java           # テーブル定数
    └── tables/
        ├── Users.java        # テーブル定義
        ├── Orders.java
        └── records/
            ├── UsersRecord.java    # Recordクラス
            └── OrdersRecord.java

TIENIPIA QUALIFIED STANDARD