😎스프링에서는 데이터를 저장할 때 다양한 방법을 제공하는데 jdbctemplate은 그 중 하나로 보다 더 편하게 sql작업을 할 수 있게 도와준다.
jdbctemplate을 사용하려면 아래와 같은 과정이 필요하다.
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
build.gradle에 jdbc의존성을 추가한다. 그러면 알아서 자신이 필요한 것들을 가져온다.
spring.datasource.url=
spring.datasource.name=
spring.datasource.password=
🫠datasource를 등록한다. 이 때 application.properties를 통해 등록하면 보다 더 편하게 사용할 수 있다.
private final JdbcTemplate template;
public Repository(DataSource dataSource) {
this.template = new JdbcTemplate(dataSource);
}
🤨datasourec가 자동 주입 되기 때문에 생성자를 통해 주입 해주면 된다. 이 때 jdbctemplate은 datasource가 필요하기 때문에 new JdbcTemplate를 통해 객체를 생성 해주고 datasource를 넘겨준다.
public List<String> getNames() {
String sql = "SELECT name FROM users";
List<String> names = jdbcTemplate.queryForList(sql, String.class);
return names;
}
}
😊sql을 직접 작성한 후 queryforList를 통해 sql을 실행하면서 그 값을 받아 올 수 있다. 이 때 String.class를 통해 반환 받을 값을 지정해주 었는데 만약 객체로 받아오고 싶다면 RowMapper를 사용하여야 한다.
아래는 RowMapper 사용 방법의 예이다.
public class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setDepartment(rs.getString("department"));
return employee;
}
}
😏강의를 들어보면 jpa로 해결 가능한것이 대부분이지만 정말 어쩔수 없이 jdbctemplate을 사용해야 할 경우가 있다고 한다. 위에서 보아서 알겠지만 jdbctemplate은 string으로 되어 있어 실수할 가능성이 높은 단점이 있다.