implementation 'org.springframework.boot:spring-boot-starter-jdbc'
//java는 db랑 연동하려면 jdbc driver가 있어야함
runtimeOnly 'com.h2database:h2'
//db와 연동할 때 db가 제공하는 client가 필요
resources/application.properties
spring.datasource.url = jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver //h2 driver
//db에 연결하려면 접속 정보 필요 -> spring boot가 해줌 -> 경로만 넣으면 됨
@Configuration
public class SpringConfig {
private final 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);
}
}
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
//생략
}
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
//implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa함
show-sql
: JPA가 생성하는 SQL 출력 여부ddl-auto
: JPA가 제공하는 테이블 자동 생성 기능 사용 여부spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
@Entity
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
import org.springframework.transaction.annotation.Transactiona
@Transactional
public class MemberService {}
@Configuration
public class SpringConfig {
private final EntityManager em;
public SpringConfig(EntityManager em) {
this.em = em;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
// return new JdbcTemplateMemberRepository(dataSource);
return new JpaMemberRepository(em);
}
}
public interface SpringDataJpaMemberRepository extends
JpaRepository<Member,Long>,
MemberRepository {
Optional<Member> findByName(String name);
}
save()
, findAll()
등)을 제공한다.findByName()
, finByEmail()
처럼 메서드 이름 만으로 조회 기능