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

Spring JDBC 실습4 : INSERT & UPDATE { SimpleJdbcInsert, SqlParameterSource }

Ben의 프로그램 2023. 7. 27. 18:14
728x90
수업목표
이번 예제에서는 Insert 와 Update 구문을 실행을 시켜볼 예정입니다.

 

RoleDao 수정 ( SimpleJdbcInsert, insert( ) )
이전 시간에 Config, DTO, DAO 를 작성을 다 해두었는데요. INSERT를 수행할 수 있는 코드를 DAO 객체에 추가해주어야 합니다. 

Insert 를 수행하기 위해서는 SimpleJdbcInsert 라는 객체가 필요합니다. 이 객체를 생성하는 일을 우선 시작하겠습니다. 

SimpleJdbcInsert 객체를 RoleDao 생성자에서 초기화를 시켜주는데요. dataSource 를 인자로 제공하고, withTableName( ) 메서드로 어떤 테이블에 생성할지만 골라주면 됩니다. 

그 다음 할 일은 실제 insert( ) 메서드를 구현하면 됩니다. insert( ) 문 같은 경우에는 Primary Key 를 자동으로 생성해야하는 경우가 존재합니다. 이럴 때는 생성된 PK 값을 다시 읽어오는 작업이 필요한데요. 그때는 SimpleJdbcInsert 객체가 그런 일들을 수행을 해주는데요. 이번 예제에서는 PK 값을 직접 넣어줄 겁니다. 다음 파트에서는 PK 를 자동으로 생성하도록 바꾸어 볼 겁니다. Insert( ) 코드를 좀 보겠습니다. Insert( ) 메서드는 Role 객체를 인자로 받아들여서 Role 객체에 있는 값을 BeanPropertySqlParameterSource( ) 를 통해서 Map 으로 바꾸어주는데요. Role 객체의 필드였던 roleId 변수를 DB에서 사용하는 이름인 ROLE_ID 로 바꾸어서 Map 객체로 생성하여 SqlParameterSource 객체 변수에 담게 됩니다. 이렇게 생성된 SqlParameterSource 라는 Map 객체를 SimpleJdbcInsert 객체가 가지고 있는 execute( ) 메서드를 사용하여 실행하게됩니다. 이렇게하면 값이 자동으로 insert 되어 저장됩니다. 

 

Insert( ) 테스트
우선 공장을 동일하게 생성하구요. DAO 객체를 공장으로부터 생성하였습니다. 그리고 Insert 를 실행하는 인자로 전달할 Role 객체를 만들었습니다. 그 다음 DAO 객체의 insert( ) 메서드를 실행하고 실행 결과로 몇건이 Insert되었는지를 보기 위해서 int count 라는 변수에 대입하였습니다. 

제대로 수행되는 것을 확인할 수 있습니다. 

 

RoleDao 수정( update( ), SqlParameterSource )
이번에는 update 문도 한번 실행시켜보겠습니다. Update 문은 쿼리문이 필요한데요. Update 문은 sql 문에서 흔히 사용하는 쿼리문과 똑같긴 한데요. :description 과 :roleId 라는 부분이 낯설죠. 이 부분은 나중에 값이 바인딩될 부분이라고 이해를 하시면 되겠습니다. 

쿼리를 추가했으니 RoleDao 에다가 Update( ) 메서드를 추가해주면 됩니다. SqlParameterSource 라는 Map 객체를 생성하는데요. 이 Map 객체는 role 을 인자로 받아서 값을 Map 형태로 가지고 있습니다. 실제로 jdbc.update( ) 메서드를 사용할 때는 첫 번째 인자로 SQL 구문을 넣어주고 두 번째 인자로 매핑을 하는 값을 실제로 들고 있는 SqlParameterSource Map 객체를 넣어주면 됩니다. 

 

update( ) 테스트
insert 테스트에서 생성한 Test 클래스 파일을 조금 수정해서 update 를 진행해보겠습니다. 

실행을 해보았더니 결과가 잘 출려되고 있는 것을 확인할 수 있습니다. 

 

 

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