김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 정리한 내용입니다.
먼저, build.gradle
에 h2 라이브러리를 추가하고
dependencies {
runtimeOnly 'com.h2database:h2'
}
application.properties
에서 디비 연결 설정을 해준다.
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
그리고 터미널에서 디비 서버를 켜주면 준비 완료.
스프링의 의존성 주입을 사용하면 다른 곳은 건드릴 필요 없이 설정파일인 SpringConfig.java
만 변경해주면 된다.
이제는 거의 이 방식으로 쓰지 않기 때문에 가볍게 보면서 어떻게 변했는지 느낌만 알고 넘어가면 된다고 한다.
소스코드 복붙해서 테스트 코드 통과하는 것만 확인하고 넘어갔다.
build.gradle
에 jdbc 라이브러리를 추가한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
}
MemberRepository 인터페이스를 JdbcTemplate으로 구현해주고 SpringConfig.java
파일의 memberRepository()
에서 해당 레포지토리를 리턴해주면 된다.
@Bean
public MemberRepository memberRepository() {
return JdbcTemplateMemberRepository(datasource);
}
SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다
고 한다. build.gradle
에 data-jpa 라이브러리를 추가하고 jdbc는 주석처리 해준다. data-jpa가 jdbc를 포함하고 있다.
dependencies {
// implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
}
application.properties
에서 jpa 설정을 해준다.
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
show-sql
은 jpa가 날리는 sql을 볼 수 있다. 그리고 이미 만들어진 테이블을 사용할 거라서 hibernate.ddl-auto
를 none
으로 써줘서 jpa가 자동으로 테이블을 생성하고 하는 기능을 꺼준다.
❗️jpa 사용시에는 데이터를 변경하거나 저장할 때 항상 트랜잭션 안에서 실행되어야 한다. 서비스 계층에 @Transactional
어노테이션을 추가해준다.
@Transactional
public class MemberService {
JPA에서는 EntityManager
를 주입해주고 memberRepository()
에서 jpa 레포지토리를 리턴해준다.
JpaRepository<T, ID>
와 MemberRepository
를 extend 해준다.public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
@Override
Optional<Member> findByName(String name);
// JPQL select m from Member m where m.name = :name
@Override
Optional<Member> findByNameAndId(String name, Long id);
// JPQL select m from Member m where m.name = :name and m.id = :id
스프링 데이터 JPA는 더 간단하다. MemberRepository
를 주입받고 Bean으로 등록할 MemberService
에 주입받은 레포지토리를 넘겨주면 된다.