섹션6, 다음으로

이재혁·2023년 6월 7일

섹션6 - 스프링 DB 접근 기술

스프링 통합 테스트

  • @SpringBootTest: 스프링 컨테이너와 테스트를 함께 실행한다.
  • @Transactional: 테스트 케이스에 이 어노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다.

JPA(Java Persistence API)

  • JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
  • JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다.
  • JPA를 사용하면 개발 생산성을 크게 높일 수 있다.

스프링 데이터 JPA

스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면 개발이 정말 즐거워진다.

💡 스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술입니다. 따라서 JPA를 먼저 학습한 후에 스프링 데이터 JPA를 학습해야 합니다.

H2 데이터베이스 설치

개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공

  • https://www.h2database.com
  • h2 데이터베이스 버전은 스프링 부트 버전에 맞춘다
  • 권한 주기: chmod 755 h2.sh
  • 실행: ./h2.sh

Untitled

순수 JDBC

환경설정

build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가

implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'

application.properties 파일 설정

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver

db에 붙으려면 datasource가 필요하다

스프링에게 생성자로 주입을 받아야한다

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import javax.sql.DataSource;
import java.util.List;
import java.util.Optional;

public class JdbcMemberRepository implements MemberRepository{

    private final DataSource dataSource;

    public JdbcMemberRepository(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public Member save(Member member) {
        return null;
    }

    @Override
    public Optional<Member> findById(Long id) {
        return Optional.empty();
    }

    @Override
    public Optional<Member> findByName(String name) {
        return Optional.empty();
    }

    @Override
    public List<Member> findAll() {
        return null;
    }
}

JdbcMemberRepository.java save 메소드

@Override
    public Member save(Member member) {
        String sql = "insert into member(name) values(?)";

        Connection conn = dataSource.getConnection(); //데이터베이스 커넥션을 가져온다

        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, member.getName());

        pstmt.executeUpdate(); //db에 최종적으로 쿼리가 보내진다

        return null;
    }

JPA

  • JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
  • JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다
  • JPA를 사용하면 개발 생산성을 크게 높일 수 있다.

gradle설정에 data-jpa는 jdbc도 포함한다

jpa는 인터페이스만 제공이 되는 것이다.

(external libraries 폴더에 hibernate가 추가 된 것을 확인할 수 있다)

ORM이라는 기술이다.(Object-Relaitonal-Mapping)

  • Mapping은 애노테이션으로 한다

  • JPA는 Entity 매니저라는 것으로 모든 것이 동작한다

profile
서비스기업 가고 싶은 대학생

0개의 댓글