Skip to content

6.6. jOOQコーディング規則

6.6.1. テーブル/フィールド参照

生成された定数を使用します。文字列でテーブルやカラムを参照しません。

java
// 正しい例(生成された定数を使用)
dsl.selectFrom(USERS).where(USERS.EMAIL.eq(email));

// 誤った例(文字列を使用)
dsl.selectFrom(DSL.table("users")).where(DSL.field("email").eq(email));

6.6.2. Record → DTO変換

RecordからDTOへの変換ロジックはDTOの静的ファクトリメソッドに記述します。

java
public record UserResponse(
    Long id,
    String name,
    String email,
    OffsetDateTime createdAt
) {

  public static UserResponse from(UsersRecord record) {
    return new UserResponse(
        record.getId(),
        record.getName(),
        record.getEmail(),
        record.getCreatedAt()
    );
  }
}

6.6.3. バッチ処理

大量データ処理時はバッチ演算を使用します。

java
public void insertBatch(List<CreateUserRequest> requests) {
  var inserts = requests.stream()
      .map(req -> dsl.insertInto(USERS)
          .set(USERS.NAME, req.name())
          .set(USERS.EMAIL, req.email()))
      .toList();

  dsl.batch(inserts).execute();
}

6.6.4. 禁止パターン

禁止パターン正しいパターン
DSL.table("users")(文字列テーブル参照)USERS(生成された定数)
DSL.field("name")(文字列フィールド参照)USERS.NAME(生成された定数)
dsl.execute("SELECT ...")(raw SQL)DSL APIを使用
ControllerでDSLContextを直接使用Repositoryレイヤーでのみ使用
Repositoryで@Transactionalを宣言Serviceレイヤーで宣言

必須

jOOQの型安全DSL APIを使用しなければなりません。文字列ベースのSQLやraw queryの使用はTQS認証審査で不適合判定を受けます。

TIENIPIA QUALIFIED STANDARD