[Boostcourse] 풀스택/웹 프로그래밍(풀스택)

Spring JDBC 실습5: Select & Delete

Ben의 프로그램 2023. 7. 27. 18:55
728x90
수업목표
이번 시간에는 한 건 Select 와 Delete 를 수행해보겠습니다.

 

RoleDaoSqls 수정
Select 와 Delete 를 수행할 SQL 을 우선 작성해두도록 하겠습니다. SQL 은 RoleDaoSqls 에서 작성하기도 했었습니다. 여기서도 :roleId 와 같이 바인딩을 위해 DTO 객체에 있는 필드의 이름을 사용하는 것을 볼 수 있습니다. 

 

Delete( ) 생성 : RoleDao 수정 
코드를 보겠습니다. NamedParameterJdbcTemplate jdbc 객체가 가지고 있는 update( ) 메서드를 DELETE SQL 문과 Map 객체를 인자로 전달하여 실행하면 됩니다. Update 를 수행했을 때는 두 번째 인자로 SqlParameterSource params 객체를 넣어주었었는데요. BeanPropertySqlParameterSource(role) 가 role 객체에 들어있는 정보를 Map 객체로 자동으로 변환시켜주었습니다. deleteById( ) 는 딱 한 건에 대해서만 삭제를 진행하기 때문에 객체를 또 만드는 것이 메모리적으로 부담이 되기도 하고 불편한 점이 있어서 Collections.singletonMap( ) 메서드를 통해 Map 객체를 직접 만들어서 대입을 해주는 것을 볼 수 있습니다. 

 

Selct( ) 생성 : RoleDao 수정
SelectById( ) 를 생성했습니다. 우선, Select 한 건을 해올 때 Select 의 조건으로 설정한 값에 해당하는 값이 DB에 없으면 오류가 발생하게 되는데요. EmptyResultDataAccessException 이라고 합니다. 예외처리를 우선 해준 것을 확인할 수 있구요. SelectAll 과 다른 점이라면 jdbc.queryForObject 를 실행했다는 점일텐데요. 첫 번째 파라미터로는 쿼리문이 들어오구요. 두 번째 파라미터로는 위에서 생성한 <roleId, 실제id값> 이런 Map 객체 값이 두 번째 파라미터로 들어갑니다. 세 번째 파라미터로는 Select 해온 값을 한 건 씩 Role 객체에 실제로 담아서 저장하는 역할을 수행하는 rowMapper 객체가 들어갑니다.  

 

Delete( ), Select( ) 테스트
ac 공장과 roleDao 객체를 생성하는 코드는 그대로 사용을 해도 되니까요. Select( ) 와 Delete( ) 를 실행시키고 반환 값을 각각 받아서 결과를 출력하는 코드를 작성하였습니다. 

직접 실행을 수행을 하면 다음과 같이 잘 출력이 되는 것을 확인할 수 있습니다. 

 

 

출처 : boostcourse 웹 프로그래밍(풀스택) 
https://www.boostcourse.org/web316/lecture/20655?isDesc=false