스프링 jdbc 템플릿

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