2024. 5. 16. 09:24ㆍ스프링
jdbc template은 MyBatis 와 같이 JDBC API의 반복 코드를 대부분 제거해준다. 그러나 SQL은 직접 작성해야 한다.
사용하기 위해서 먼저 build.gradle 에 dependency를 추가해준다.
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
datasource를 위해 application.properties에 url, username. password를 작성해준다.
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=ididid
spring.datasource.password=123123
스프링부트의 auto configuration 기능으로 Datasource가 자동으로 빈으로 등록된다.
이제 사용하고자 하는 repository에 빈으로 등록되어 있는 Datasource를 주입하고 그 Datasource를 이용해 jdbc template을 만들거다.
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcTemplateRepository(DataSource dataSource){
jdbcTemplate = new JdbcTemplate(dataSource);
}
위와 같이 만든 jdbcTemplate의 메소드를 통해 crud를 진행한다.
template.update()
- 데이터를 변경할 때는 update를 사용한다.
- INSERT, UPDATE, DELETE SQL에 사용한다.
jdbcTemplate.update(
"insert into user (first_name, last_name) values (?, ?)",
"gildong", "hong");
template.queryForObject()
- 데이터를 하나 조회할 때 사용한다. 즉, 검색 결과 tuple이 하나일 때 사용한다.
- 결과가 없으면 EmptyResultDataAccessException 예외가 발생한다.
- 결과가 둘 이상이면 IncorrectResultSizeDataAccessException 예외가 발생한다.
Actor actor = jdbcTemplate.queryForObject(
"select first_name, last_name from user where id = ?",
(resultSet, rowNum) -> {
Actor newActor = new Actor();
newActor.setFirstName(resultSet.getString("first_name"));
newActor.setLastName(resultSet.getString("last_name"));
return newActor;
},1234L);
template.query()
- 데이터를 하나 이상 조회할 때 사용한다. 데이터를 조회해서 list로 반환한다.
- 결과가 없을 시 빈 컬렉션을 반환한다.
List<Actor> actors = jdbcTemplate.query(
"select first_name, last_name from t_actor",
(resultSet, rowNum) -> {
Actor actor = new Actor();
actor.setFirstName(resultSet.getString("first_name"));
actor.setLastName(resultSet.getString("last_name"));
return actor;
});
RowMapper()
- 데이터 조회 결과를 객체로 변환할 때 사용한다.
- RowMapper가 필요한 메서드에 직접 람다식을 작성해도 되지만, 메서드로 빼서 사용하는 게 좋겠다.
- 위에 template.query() 의 예시로 나온 부분중에서
(resultSet, rowNum) -> {
Actor actor = new Actor();
actor.setFirstName(resultSet.getString("first_name"));
actor.setLastName(resultSet.getString("last_name"));
return actor;
}
이부분이 RowMapper() 부분이다.
'스프링' 카테고리의 다른 글
스프링 spring (0) | 2024.05.16 |
---|---|
스프링 AOP (0) | 2024.05.16 |
스프링부트 테스트 (0) | 2024.05.14 |
DI 주입 방법 (0) | 2024.05.14 |
@Configuration 스프링빈 등록 (0) | 2024.05.14 |