Spring의 JdbcTemplate에서 콜백 메서드로 사용되는 주요 인터페이스와 메서드는 SQL 쿼리를 수행할 때 각 단계의 동작을 커스터마이징하기 위해 제공됩니다. 대표적인 콜백 메서드로는 RowMapper, ResultSetExtractor, PreparedStatementCreator, PreparedStatementSetter 등이 있습니다.
아래는 JdbcTemplate에서 자주 사용하는 콜백 인터페이스와 메서드 목록입니다.
1. RowMapper
• 설명: 각 행을 객체로 매핑하여 반환합니다. 쿼리 결과를 객체로 변환하는 데 사용되며, 일반적으로 query() 메서드에서 사용됩니다.
• 사용 메서드: RowMapper<T> mapRow(ResultSet rs, int rowNum)
사용 예시
jdbcTemplate.query("SELECT * FROM users", (rs, rowNum) ->
new User(rs.getInt("id"), rs.getString("name"))
);
2. ResultSetExtractor
• 설명: 결과 집합(ResultSet) 전체를 하나의 객체로 변환합니다. 복잡한 SQL 결과를 처리해야 할 때 주로 사용됩니다.
• 사용 메서드: T extractData(ResultSet rs)
사용 예시
jdbcTemplate.query("SELECT * FROM users", rs -> {
List<User> users = new ArrayList<>();
while (rs.next()) {
users.add(new User(rs.getInt("id"), rs.getString("name")));
}
return users;
});
3. PreparedStatementCreator
• 설명: SQL 쿼리를 작성하고, PreparedStatement를 생성하는 단계를 커스터마이징할 때 사용됩니다. 주로 INSERT, UPDATE 등에서 입력값을 설정하는 데 유용합니다.
• 사용 메서드: PreparedStatement createPreparedStatement(Connection con)
사용 예시
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement("INSERT INTO users (name) VALUES (?)");
ps.setString(1, "John");
return ps;
});
4. PreparedStatementSetter
• 설명: PreparedStatement의 파라미터 값을 설정하는 데 사용됩니다. 쿼리를 실행하기 전 파라미터 값들을 직접 설정할 수 있습니다.
• 사용 메서드: void setValues(PreparedStatement ps)
사용 예시
String sql = "UPDATE users SET name = ? WHERE id = ?";
jdbcTemplate.update(sql, ps -> {
ps.setString(1, "Jane");
ps.setInt(2, 1);
});
5. BatchPreparedStatementSetter
• 설명: 배치 작업에서 여러 개의 PreparedStatement를 설정할 때 사용합니다. 여러 행을 한 번에 처리해야 하는 대용량 작업에서 효율적입니다.
• 사용 메서드:
• int getBatchSize(): 배치 처리할 항목 수를 반환합니다.
• void setValues(PreparedStatement ps, int i): 각 PreparedStatement의 값을 설정합니다.
사용 예시
String sql = "INSERT INTO users (name) VALUES (?)";
List<String> names = List.of("Alice", "Bob", "Charlie");
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, names.get(i));
}
@Override
public int getBatchSize() {
return names.size();
}
});
6. CallableStatementCreator
• 설명: **저장 프로시저(Stored Procedure)**를 호출할 때 사용합니다. CallableStatement를 생성하고, 파라미터를 설정하는 데 유용합니다.
• 사용 메서드: CallableStatement createCallableStatement(Connection con)
사용 예시
String sql = "{call my_stored_procedure(?)}";
jdbcTemplate.execute(con -> {
CallableStatement cs = con.prepareCall(sql);
cs.setInt(1, 1);
return cs;
});
7. SqlParameterSource
• 설명: 이름 기반 파라미터를 제공하여, NamedParameterJdbcTemplate와 함께 파라미터 값을 매핑하는 데 사용됩니다.
• 주요 클래스: MapSqlParameterSource, BeanPropertySqlParameterSource
사용 예시 (NamedParameterJdbcTemplate)
NamedParameterJdbcTemplate namedTemplate = new NamedParameterJdbcTemplate(dataSource);
String sql = "SELECT * FROM users WHERE id = :id";
SqlParameterSource namedParameters = new MapSqlParameterSource("id", 1);
namedTemplate.query(sql, namedParameters, (rs, rowNum) ->
new User(rs.getInt("id"), rs.getString("name"))
);
8. ParameterizedRowMapper (Deprecated)
• 설명: 현재는 RowMapper로 대체된 인터페이스입니다. JdbcTemplate이 발전하면서 구식이 되었고, 최신 Spring 버전에서는 RowMapper를 사용하는 것이 좋습니다.
이와 같이 JdbcTemplate에서는 다양한 콜백 메서드를 통해 SQL 실행의 세부 과정을 커스터마이징할 수 있습니다. 이 콜백 메서드들은 SQL 쿼리 실행의 각 단계를 제어하고, 다양한 요구사항에 맞게 JdbcTemplate의 기능을 확장하는 데 중요한 역할을 합니다.
'Database > JDBC' 카테고리의 다른 글
JDBC : JDBC Introduction (0) | 2024.08.01 |
---|