Spring Data JPA 시작하기

날아올라돼지야·2024년 9월 7일

스프링 ORM 기초

목록 보기
4/12

1. Spring Data JPA 소개

Spring Data JPA는 JDBC보다 발전된 프레임워크로, JPA(Java Persistence API)Hibernate와 같은 ORM(Object Relational Mapping) 프레임워크를 사용해 개발자의 작업을 단순화합니다. 이 강의에서는 Spring Data JPA를 사용해 SQL 작성 및 데이터베이스 상호작용의 복잡함을 제거하는 방법을 설명합니다.

2. Spring Data JPA 의존성 추가

  • Spring Boot Starter를 사용하여 Spring Data JPA를 간편하게 설정할 수 있습니다.
  • pom.xmlspring-boot-starter-data-jpa 의존성을 추가합니다.
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

3. 엔티티 클래스 설정 (ORM 설정)

  • 엔티티 클래스는 데이터베이스 테이블과 매핑되는 POJO 클래스를 의미합니다.
  • @Entity@Table 애너테이션을 사용해 클래스와 테이블 간의 관계를 정의합니다.
  • 필드와 컬럼 간의 관계를 설정하기 위해 @Column 애너테이션을 사용합니다.
  • 기본 키(Primary Key)@Id@GeneratedValue 애너테이션을 사용해 설정합니다.
@Entity
@Table(name = "contact_msg")
public class Contact {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer contactId;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    // Getters and Setters
}

4. Repository 인터페이스 정의

  • Spring Data JPA의 마법은 Repository 인터페이스에서 시작됩니다.
  • CrudRepository 또는 JpaRepository를 확장한 인터페이스를 정의하여 데이터베이스 작업을 자동화합니다.
  • 이 인터페이스는 SQL을 직접 작성할 필요 없이 기본 CRUD 작업(생성, 조회, 업데이트, 삭제)을 지원합니다.
@Repository
public interface ContactRepository extends CrudRepository<Contact, Integer> {
    // 기본 CRUD 작업을 제공
}

5. 애플리케이션 설정

  • Entity 클래스와 Repository 패키지 경로를 지정하여 Spring Data JPA가 엔티티 클래스와 리포지토리를 인식하도록 설정합니다.
  • @EnableJpaRepositories@EntityScan 애너테이션을 사용하여 리포지토리 및 엔티티 클래스의 위치를 지정합니다.
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.easybytes.easyschool.repository")
@EntityScan(basePackages = "com.easybytes.easyschool.model")
public class EasySchoolApplication {
    public static void main(String[] args) {
        SpringApplication.run(EasySchoolApplication.class, args);
    }
}

6. 서비스 계층에서의 사용

  • 서비스 클래스에서 Repository 인터페이스를 사용하여 데이터를 저장, 업데이트, 삭제합니다.
  • @Autowired를 통해 ContactRepository를 주입받고, 이를 사용해 데이터를 처리합니다.
@Service
public class ContactService {

    @Autowired
    private ContactRepository contactRepository;

    public void saveContact(Contact contact) {
        contactRepository.save(contact); // 저장 또는 업데이트
    }
}

7. 주요 메서드 동작 방식

  • save() 메서드는 삽입 또는 업데이트 작업을 처리합니다. 기본 키가 없으면 삽입, 기본 키가 있으면 업데이트 작업이 자동으로 수행됩니다.
public void saveOrUpdateContact(Contact contact) {
    contactRepository.save(contact);
}

소스코드 정리

  1. pom.xml에 의존성 추가:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
  1. 엔티티 클래스 Contact.java:
@Entity
@Table(name = "contact_msg")
public class Contact {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer contactId;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    // Getters and Setters
}
  1. 리포지토리 인터페이스 ContactRepository.java:
@Repository
public interface ContactRepository extends CrudRepository<Contact, Integer> {
}
  1. 서비스 클래스 ContactService.java:
@Service
public class ContactService {

    @Autowired
    private ContactRepository contactRepository;

    public void saveContact(Contact contact) {
        contactRepository.save(contact);
    }
}
  1. 애플리케이션 설정 EasySchoolApplication.java:
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.easybytes.easyschool.repository")
@EntityScan(basePackages = "com.easybytes.easyschool.model")
public class EasySchoolApplication {
    public static void main(String[] args) {
        SpringApplication.run(EasySchoolApplication.class, args);
    }
}

과정 요약

  1. Spring Data JPA 의존성 추가: Spring Boot Starter를 사용하여 간편하게 설정.
  2. 엔티티 클래스 정의: @Entity, @Table 등 애너테이션으로 데이터베이스 테이블과 매핑.
  3. Repository 정의: CrudRepository 인터페이스를 확장해 데이터베이스 작업을 자동화.
  4. Spring Boot 설정: @EnableJpaRepositories@EntityScan으로 Spring Data JPA 구성.
  5. 서비스 계층에서의 사용: Repository를 서비스에서 사용하여 CRUD 작업 처리.

이 과정은 Spring Data JPA를 사용해 복잡한 SQL 작성 없이 데이터베이스 작업을 효율적으로 처리하는 방법을 제공합니다.

profile
무슨 생각하며 사니

0개의 댓글