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認証審査で不適合判定を受けます。