이제 회원 가입을 하면 그 정보가 우리의 메모리가 아닌 우리의 DB에 저장되도록 설정해보자.
우선 위의 build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리를 추가해주어야 한다.
위와 같이 dependencies에 파란색 부분 코드를 추가해준다.
그 후 main -> resources -> application.properties 에 가서
위의 코드를 넣어준다(spring.datasource.url 에는 우리가 이전에 H2를 연결할 때 사용하였던 JDBC URL을 적어준다).
build.gradle 파일에 있는 위의 아이콘을 클릭해주면 h2.Driver 가 빨간색으로 표시되어 있는 것이 사라진다.
그 후 main -> java -> com.example.hellospringboot -> service -> repository 에 가서 JdbcTemplateMemberRepository라는 클래스를 하나 만들어준 뒤
MemberRepository를 메모리가 아닌 DB와 연결할 수 있게 다시 구현해줘야 하므로 위와 같이 작성해놓는다.
그 후 클래스 안에 위와 같은 코드를 써준다.
DB와 연결하기 위해서는 JdbcTemplate이라는 것을 써주어야 하고, 위의 설정들을 다 잘 해주었다면 스프링에서 @Autowired를 써주면 DataSource를 자동으로 Injection 해주게된다. 이 DataSource를 JdbcTemplate에 넣어주면 된다.
이제 findById 메소드를 구현해보자.
JdbcTemplateMemberRepository 클래스에 위와 같은 코드를 써주고,
findById 메소드를 위와 같이 작성해준다.
RowMapper는 Template 객체의 query 메소드를 통해 결과값을 가져올 때, sql문에 따라 추출된 결과를 리턴받을 객체의 멤버변수에 적절하게 할당하기 위한 매핑 수단이다.
위의 코드가 동작하는 방식은 findById 문에서 sql 문을 통해 찾은 결과값이 memberRowMapper 의 rs로 넘어간다. 그러면 이 결과값의 id와 name 을 Member 객체의 id와 name 에 넣어준 후, 이 Member 객체를 반환한다.
반환된 Member 객체는 List의 형태로 result에 저장되게 되고, 이 중 하나를 stream.findAny()를 통해 return 해준다.
findByName 메소드는 위와 같이,
findAll 메소드는 위와 같이 작성해준다.
save 메소드는 위와 같이 작성해준다.
우선 SimpleJdbcInsert에 jdbcTemplate 을 넣어 객체를 생성해주고,
withTableName에 데이터를 삽입할 테이블 이름을, usingGeneratedKeyColumns에 값이 자동 생성 될 key column list를 지정해준다.
그 후 Map 형태의 parameter에 "name" column에 넣어줄 값을 parameter에 넣어주어서 jdbcInsert를 수행할 때 사용한다.
executeAndReturnKey는 데이터를 삽입한 후 자동으로 생성된 key값을 return 해준다.
마지막으로 이전에 작성해 준 SpringConfig 클래스로 가서 MemberRepository 인터페이스가 JdbcTemplateMemberRepository 클래스의 구현을 참조할 수 있도록 위와 같이 설정해준다(스프링이 알아서 dataSource를 불러올 수 있게 Bean 생성해줌).
혹시 모를 오류 방지를 위해 application.properties에
위의 코드도 추가해주자.
이제 localhost:8080으로 가서 여러가지 이름으로 회원 가입을 진행해보자.
위와 같이 여러개의 이름으로 회원 가입을 해준 뒤, 회원 목록을 클릭했을 때 잘 나타나고, H2 데이터베이스로 간 뒤, member 테이블을 조회해보면
정보가 잘 들어가 있는 것을 확인할 수 있다!!
서버를 껐다가 다시 실행해봐도 메모리에 정보를 저장했던 이전과 다르게 회원 정보가 그대로 남아있는 것을 확인할 수 있다.
'BackEnd > Spring Boot' 카테고리의 다른 글
H2 데이터베이스 설치하기 (0) | 2022.10.22 |
---|---|
회원 웹 기능 - 조회하기 (0) | 2022.10.22 |
회원 웹 기능 - 등록하기 (0) | 2022.10.20 |
회원 웹 기능 - 홈 화면 추가하기 (0) | 2022.10.19 |
자바 코드로 직접 스프링 빈 등록하기 (0) | 2022.10.18 |