TIL

관계형 데이터베이스 읽고 쓰기

Spring Batch의 두 가지 전략

JdbcCursorItemReader

JdbcCursorItemReader 해부

JdbcCursorItemReader
    │
    ├────── DataSource  
    │        └─ (DB 연결 관리)  
    │
    ├────── SQL  
    │        └─ (데이터 조회 쿼리)  
    │
    ├────── RowMapper  
    │        └─ (ResultSet → Java 객체 변환)  
    │
    ├────── PreparedStatement  
    │        └─ (쿼리 실행 및 결과 조회)  
    │
    └────── PreparedStatementSetter (optional)  
             └─ (파라미터 동적 바인딩) 
graph TD
    subgraph "read()"
        rsNext["rs.next()"]

        subgraph "RowMapper"
            mapRow["mapRow(rs, rowNum)"]
        end
        returnVictim["return "]

        rsNext -->|"readCursor()"| mapRow
        mapRow --> returnVictim
    end

    subgraph "openCursor()"
        SQL["SQL<br/>'SELECT * FROM victims ...'"]
        PreparedStatementSetter["PreparedStatementSetter"]

        SQL -- "sql 전달" --> executeQuery
        PreparedStatementSetter -- "파라미터 바인딩" --> executeQuery

        subgraph "PreparedStatement"
            executeQuery["executeQuery()"]
        end

        subgraph "ResultSet 초기화"
            rsInit["this.rs = executeQuery()"]
        end
        executeQuery --> rsInit
    end