implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
자바는 db와 붙으려면 jdbc 드라이버를 이용하여 연동을 한다.
db에 접근하기 위한 접속 정보를 넣어야한다. 이전에는 개발자가 다 넣어줘야했지만 최근에는 spring boot가 다 해주기 때문에 경로만 넣어줘도 된다.
resources/application.properties
spring.datasource.url = jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
h2.driver에 에러가 걸리는 경우에는 build.gradle에 작성 h2 database가 import 되지 않아서 그렇다. build.gradle 창에 나타난 코끼리를 눌러주거나, 우측 Gradle 탭에서 refresh를 하면 된다.
(원래는 ID, PW도 적지만, h2 db는 생략해도 된다.)
여기까지 작성하면 스프링이 db와 연결하는 작업을 다 해준다.
기존에는 MemoryMemberRepository를 생성하였었다. MemberRepository라는 인터페이스를 생성하였었기 때문에 db랑 연동하는 구현체를 생성하면 된다.
repository/JdbcMemberRepository 클래스 생성 후 MemberRepository를 implements 한다.
그리고 db와 연결하려면 dataSource가 필요하다.
private final DataSource dataSource;
그리고 dataSource를 스프링으로부터 주입받아야한다. 이전에 application.properties에서 세팅한 접속 정보를 스프링이 이용하여 dataSource를 만들어 놓고 주입 받는다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.jdbc.datasource.DataSourceUtils;
import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class JdbcMemberRepository implements MemberRepository {
private final DataSource dataSource;
public JdbcMemberRepository(DataSource dataSource) {
this.dataSource = dataSource;
}




강의 내용을 코드와 함께 타이핑하여 전달하기 어려우므로 노트필기한 내용들을 올렸다.
SpringConfig 파일을 열고, 아래 코드로 변경한다.
package hello.hellospring.service;
import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
private DataSource dataSource;
@Autowired
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
//return new MemoryMemberRepository();
return new JdbcMemberRepository(dataSource);
}
}
Config를 수정하는 것만으로 MemoryMemberRepository에서 JdbcMemberRepository로 변경되었다.