Skip to content

6.1. jOOQ概要および設定

6.1. jOOQ概要

6.1.1. JPA使用禁止

TQS認証プロジェクトではJPA(Hibernate)の使用を禁止します。以下の依存関係は含めることができません。

禁止依存関係理由
spring-boot-starter-data-jpaJPA/Hibernateを含む
hibernate-coreORMフレームワーク
spring-data-jpaJPA抽象化

6.1.2. JPAではなくjOOQを選択する根拠

項目jOOQJPA/Hibernate
SQL制御開発者がSQLを直接作成ORMがSQLを自動生成
性能予測実行されるSQLを正確に予測可能N+1、遅延ロードなど予測困難
型安全性コンパイル時にSQLエラーを検出実行時にエラーが発生
複雑なクエリネイティブSQL水準の表現力JPQLの限界、ネイティブクエリが必要
スキーマ同期Flyway + codegenで常に最新状態Entityマッピング不一致のリスク

6.1.3. 標準依存関係

xml
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jooq</artifactId>
</dependency>

spring-boot-starter-jooqは以下を含みます:

  • jOOQコアライブラリ
  • Spring Transaction統合
  • DSLContext自動構成

6.2. DSLContext設定

6.2.1. 自動構成

Spring Bootの自動構成によりDSLContextがBeanとして登録されます。application.ymlにデータソースとjOOQ設定を追加すれば、別途のJava設定なしに使用することができます。

yaml
spring:
  jooq:
    sql-dialect: postgres

6.2.2. カスタム設定(必要時)

jOOQの詳細動作をカスタマイズする必要がある場合にのみ設定クラスを作成します。

java
@Configuration
public class JooqConfig {

  @Bean
  public DefaultConfigurationCustomizer jooqConfigCustomizer() {
    return configuration -> {
      configuration.settings()
          .withRenderNameCase(RenderNameCase.LOWER)
          .withRenderQuotedNames(RenderQuotedNames.NEVER)
          .withExecuteLogging(true);
    };
  }
}
設定説明
renderNameCaseLOWERSQLレンダリング時に小文字を使用
renderQuotedNamesNEVER識別子の引用符を不使用
executeLoggingtrue実行SQLロギングを有効化

TIENIPIA QUALIFIED STANDARD