SpringBoot 를 배워보자

JPA 예제 (MySQL) 상세 설명

_Blue_Sky_ 2024. 10. 19. 14:03
728x90
728x90

1. 환경 설정

  • Spring Boot 프로젝트 생성: Spring Initializr를 이용하여 Spring Boot 프로젝트를 생성합니다.
  • 의존성 추가: spring-boot-starter-data-jpa 의존성을 추가하여 JPA를 사용할 수 있도록 합니다.
  • MySQL 설정: application.properties 또는 application.yml 파일에 MySQL 연결 정보를 설정합니다.
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
 
 

2. 엔티티 클래스 생성

엔티티 클래스는 데이터베이스 테이블과 매핑되는 자바 클래스입니다. @Entity 애노테이션으로 엔티티 클래스임을 선언하고, @Table 애노테이션으로 매핑할 테이블 이름을 지정합니다.

@Entity
@Table(name = "members")
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // getter, setter
}
 
  • @Id: 엔티티의 기본 키를 나타냅니다.
  • @GeneratedValue: 기본 키 생성 전략을 지정합니다. GenerationType.IDENTITY는 MySQL의 AUTO_INCREMENT와 같습니다.
728x90

3. Repository 인터페이스 생성

Repository 인터페이스는 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 위한 메소드를 선언합니다. Spring Data JPA는 이 인터페이스를 기반으로 구현체를 자동으로 생성합니다.

public interface MemberRepository extends JpaRepository<Member, Long> {
    // 추가적인 쿼리 메소드를 정의할 수 있습니다.
    List<Member> findByName(String name);
}
 

4. 서비스 클래스 생성

Repository를 사용하여 실제 비즈니스 로직을 구현합니다.

@Service
public class MemberService {
    @Autowired
    private MemberRepository memberRepository;

    public Member save(Member member) {
        return memberRepository.save(member);
    }

    public Member findById(Long id) {
        return memberRepository.findById(id).orElse(null);
    }
}
 

5. 테스트 코드 작성

@SpringBootTest
class MemberServiceTest {

    @Autowired
    private MemberService memberService;

    @Test
    void saveMember() {
        Member member = new Member();
        member.setName("John Doe");

        Member savedMember = memberService.save(member);
        assertThat(savedMember).isNotNull();
    }
}
 

6. 실행 및 확인

Spring Boot 애플리케이션을 실행하고, 테스트 코드를 실행하여 결과를 확인합니다.

추가 설명

  • JPQL: 객체 지향적인 쿼리 언어로, SQL과 유사하지만 객체를 대상으로 쿼리를 작성합니다.
  • @Query: 커스텀 쿼리를 작성할 때 사용합니다.
  • @NamedQuery: NamedQuery를 정의하여 반복적으로 사용하는 쿼리를 관리합니다.
  • @Modifying: UPDATE, DELETE 쿼리를 실행할 때 사용합니다.
  • @Transactional: 트랜잭션을 관리합니다.

실제 예제: 회원 목록 조회 및 저장

// 회원 목록 조회
List<Member> members = memberRepository.findAll();

// 이름으로 회원 조회
Member member = memberRepository.findByName("John Doe");

// 회원 저장
member.setName("Jane Doe");
memberRepository.save(member);

// 회원 삭제
memberRepository.deleteById(memberId);
 

더 자세한 내용

  • Spring Data JPA 공식 문서: 다양한 기능과 예제를 확인할 수 있습니다.
  • Hibernate 문서: Hibernate는 대표적인 JPA 구현체입니다. Hibernate 문서를 참고하여 JPA에 대한 더 깊이 있는 이해를 할 수 있습니다.

주의 사항

  • 데이터베이스 스키마: 엔티티 클래스와 데이터베이스 스키마는 일치해야 합니다.
  • Lazy Loading: 지연 로딩을 사용하면 성능을 향상시킬 수 있지만, 잘못 사용하면 N+1 문제가 발생할 수 있습니다.
  • 캐싱: 캐싱을 사용하여 성능을 향상시킬 수 있습니다.
  • 트랜잭션: 트랜잭션을 올바르게 관리해야 데이터 무결성을 보장할 수 있습니다.

 

728x90
728x90