JdbcTemplate 사용 예제
JdbcTemplate을 매핑하여 더욱 편리하게 사용할 수 있는 NamedParameterJdbcTemplate이라는 클래스가 있다.
NamedParameterJdbcTemplate은 SQL구문 안에 파라미터를 사입할 수 있도록 ':파라미터 이름' 형식의 플레이스 홀더를 이용한다.
일반적인 JDBC API는 ?를 플레이스홀더로 사용하므로 불편하다.
NamedParameterJdbcTemplate의 queryForObject() 메서드를 사용하여 쿼리 실행 결과를 오브젝트로 변환한 상태로 얻어 온다.
첫번째 인자로 SQL,
두번째 인자로 파라미터,
세번째 인자로 반환 값이 될 객체 클래스를 지정한다. 이 메서드는 쿼리 반환 값이 단일 레코드가 아니면 incorrectResultSizeDataAccessException을 발생시킨다.
@EnableAutoConfiguration
public class App implements ComandLineRunner {
@Autowired
NamedParameterJdbcTemplate jdbcTemplate;
@Override
public void run(String... strings) throws Exception {
String sql = "SELECT :a + :b";
SqlParameterSource param = new MapSqlParameterSource()
.addValue("a", 100)
.addValue("b", 200);
Integer result = jdbcTemplate.queryForObject(sql, param, Integer.class);
System.out.println("result = "+ result);
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
JdbcTemplate을 사용한 객체 매핑은 익명클래스(anonymous class)로 구현한 예.
Customer result = jdbcTemplate.queryForOjbect(sql, param,
new RowMapper<Customer>() {
@Override
public Customer mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Customer(rs.getInt("id"), rs.getString("first_name"), rs.getString("last_name"));
}
}
);
System.out.println("result = " + result);
람다표현식으로 바꾼 예제.
Customer result = jdbcTemplate.queryForObject
(
sql,
param,
(rs, rowNum) -> new Customer(rs.getInt("id"), rs.getString("first_name"), rs.getString("last_name"))
);
'프로그래밍 > Spring' 카테고리의 다른 글
Log4JDBC로 SQL 로그 출력을 위한 설정 (0) | 2019.04.17 |
---|---|
H2 파일 데이터베이스를 사용하도록 설정 (0) | 2019.04.17 |
CommandLineRunner이용 및 어플리케이션 구조 (0) | 2019.04.16 |
@ComponentScan을 사용한 자동 Bean등록 (0) | 2019.04.16 |
스프링 프레임워크에서 셋터, 생성자로 주입 예제 (0) | 2019.04.16 |