HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Spring Data
Spring Data
/
📌
Spring JDBC(Java Database Connectivity)
/
👠
JDBC Template
👠

JDBC Template

이용이유JDBC Template 이용NamedParameterJdbcTemplateMapping a Jdbc ResultSet To an Object

이용이유

notion image
Connection 획득 Statement 를 이용한 질의 ResultSet 을 이용한 질의결과 사용 Statement , Connection 반납
  • 위의 과정이 Jdbc API를 이용해서 data에 접근하기 위해서는 반복이 계속 되게 됨→ JDBC Template을 이용하여 반복 제거
  • 어떠한 쿼리를 이용하게 될 지에 대한 부분이 매번 바뀌는 부분임 → template callback 패턴(토비의 스프링에 나옴) → 변경이 필요한 부분만 제공해서 간결한 코드를 작성하게 해주는 것이 JDBC Template!
  • 그러나 JdbcTemplate을 이용하면 쿼리문과 코드가 섞이게 됨 → 유지보수가 힘들어짐 → 쿼리와 코드를 구분하기 위해 사용하는 것이 MyBatis

JDBC Template 이용

[참고] https://gmlwjd9405.github.io/2018/05/15/setting-for-db-programming.html
// config @Configuration public class JdbcTemplateConfig { @Bean public DataSource dataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setUsername("root"); dataSource.setPassword("geunomysql!@#$"); dataSource.setUrl("jdbc:mysql://localhost:3306/book_manager?serverTimezone=UTC"); return dataSource; } @Bean public JdbcTemplate jdbcTemplate(){ return new JdbcTemplate(dataSource()); } } // repository @Repository public class StudentRepository { private final JdbcTemplate jdbcTemplate; public StudentRepository(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void insert(Student... students){ for(Student student : students){ this.jdbcTemplate.update("insert into student (`name`, `id`, `age`) values (?, ?, ?)", student.getName(), student.getId(), student.getAge()); } } public List<Student> select(){ List<Student> result = this.jdbcTemplate.query("select id, name, age from student", (resultSet, rowNum) -> { Student stu = new Student(); stu.setName(resultSet.getString(2)); stu.setAge(Integer.parseInt(resultSet.getString(3))); stu.setId(Integer.parseInt(resultSet.getString(1))); return stu; }); return result; } }
  • 메서드
    • query → List 반환
    • queryForObject → 한개 반환
    • update — insert, delete, update query 실행
 

NamedParameterJdbcTemplate

  • 내부적으로는 JdbcTemplate을 이용하고 sql에 파라미터 넣을 때 ? 로 파라미터를 넘기던 것을 변수명으로 넘길 수 있도록 구현 해놓은 클래스임
return jdbcTemplate.queryForObject("SELECT * FROM customers WHERE customer_id = UUID_TO_BIN(:customerId);", Map.of("customerId", customerId.toString()), (rs, i) -> Optional.of(this.mapperToCustomer(rs, i)));

Mapping a Jdbc ResultSet To an Object