Category jOOQ

jOOQ에 관한 내용입니다.

jOOQ path-based Join

jOOQ를 사용하다 보면 매번 JOIN할 때마다 ON 절을 명시해야 하는 번거로움이 있다. JPA – QueryDSL에서는 Entity의 연관관계 덕분에 ON 절 없이도 간단하게 JOIN을 작성할 수 있는데, jOOQ에서도 외래키(Foreign Key) 정보를 기반으로 테이블 간 연관관계 Path를 자동 생성해서 활용하면 ON 절…

jOOQ ExecuteListener로 슬로우 쿼리 감지

jOOQ의 ExecuteListener를 활용하면 애플리케이션 레벨에서 슬로우 쿼리를 실시간 슬로우 쿼리 감지할 수 있다 ExecuteListener ExecuteListener는 jOOQ가 제공하는 라이프사이클 훅으로, SQL 실행의 각 단계에서 커스텀 로직을 실행할 수 있게 해준다 PerformanceListener 구현 jOOQ Configuration 등록 Spring Boot 3.x에서는 DefaultConfigurationCustomizer를 통해 jOOQ…

jOOQ Testcontainers + Flyway

JPA Entity 기반 DSL 생성 방식은 좋지만 멀티모듈 강제, 일부 DB 객체 지원 불가 등의 제약이 있었다. 이번에는 Testcontainers와 Flyway를 결합하여 DDL 파일로 jOOQ DSL을 생성하는 방식을 살펴보자 DDL Database 방식의 한계 순수 DSL 파일만으로 DSL을 생성하는 방식(DDL Database)를 살펴보자…

jOOQ Code Generation JPA

코드만 봐도 어떤 쿼리가 실행될지 예측하기 쉽다는 것이 jOOQ의 큰 장점이다. 여기서는 jOOQ의 핵심이라 할 수 있는 코드 제너레이션(Code Generation)방식과 무엇을 기준으로 DSL을 만들어야 하는지 알아본다 Code Generation jOOQ의 코드 제너레이션은 다양한 데이터 소스 중 하나를 참고하여 jOOQ DSL을 생성하는…

jOOQ ActibeRecord 패턴

ActiveRecord 패턴은 Java 개발자에게 생소할 수 있다. jOOQ는 이 패턴을 지원하여 객체가 직접 데이터베이스 작업을 수행할 수 있게 한다. ActiveRecord 패턴 핵심 개념: 데이터베이스 테이블의 행(Row)를 감싼 객체가 데이터와 함께 CRUD 작업을 직접 수행하는 메서드를 포함 UML 다이어그램 비교 일반적인…

jOOQ UPDATE와 DELET

데이터 수정과 삭제는 신중해야 하는 작업이다. jOOQ는 동적 필드 업데이트부터 WHERE 절 없는 위험한 쿼리를 방지하는 안전장치까지 제공해준다 UPDATE 3가지 방식 DAO를 통한 전체 필드 업데이트 JPA의 save()처럼 POJO 전체를 업데이트 – 변경 여부와 관계없이 모든 컬럼이 SET 절에 포함된다…

jOOQ INSERT

데이터 삽입은 모든 애플리케이션의 기본이다. jOOQ는 JPA처럼 편리한 DAO 방식부터 벌크 INSERT까지 다양한 INSERT 패턴을 제공한다 jOOQ INSERT의 5가지 방식 자동 생성 DAO를 통한 INSERT JPA의 save() 메서드처럼 사용할 수 있는 가장 간편한 방식 Repository 구현 핵심 특징 생성된 SQL…

jOOQ subQuery와 Enum Converter

복잡한 SQL의 핵심은 서브쿼리이다. jOOQ는 세 가지 타입의 서브쿼리(SELECT절, FROM절, WHERE절)를 타입 안전하게 작성할 수 있다 서브쿼리의 3가지 유형 스칼라 서브쿼리 (SELECT절) SELECT절에서 서브쿼리를 사용하여 계산된 값을 조회한다 요구사항 영화별 대여료를 기준으로 가격 등급을 분류하고, 각 영화의 총 재고 수를…

jOOQ 조건절과 동적 쿼리

SQL의 핵심은 조건 절이다. jOOQ는 타입 안전한 방식으로 조건을 구성하고, 동적으로 쿼리를 생성할 수 있는 강력한 기능을 제공한다. jOOQ의 모든 조건은 org.jooq.Condition 인터페이스를 구현한다. 이 조건들은 메서드 체이닝 방식으로 조합할 수 있어 직관적이고 읽기 쉬운 코드를 작성할 수 있다 AND…

jOOQ DAO

jOOQ는 generate { daos = true } 설정으로 각 테이블마다 기본 CRUD 메서드를 포함한 DAOImpl을 상속한 DAO 클래스를 자동 생성한다 자동 생성된 DAO란? jOOQ는 각 테이블에 대해 DAOImpl을 상속받은 DAO 클래스를 생성한다 생성 위치 FilmDao 구조 DAO 활용 방법 –…