[SpringBoot] 스프링부트 + JPA를 이용한 CRUD 구현 1. 시작하기


🎋 스프링 부트 프로젝트 만들기


🤔 Spring Initializr를 이용한 스프링 부트 프로젝트 생성하기


Dependencies에는

  • Spring Web

  • Spring Data JPA

  • Lombok

  • MySQL Driver

를 추가해주자.



🎋 JPA란?


  • Java Persistence API

  • 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음

    • ORM : 애플리케이션의 객체를 RDB 테이블에 매핑, 자동으로 영속화 해주는 것

    • MyBatis, iBatis는 쿼리를 매핑하는 SQL Mapper / JPA는 객체를 매핑하는 ORM

  • 개발자는 객체지향적으로 프로그래밍을 하고, JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성하고 실행

  • 유지보수 용이

  • JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있음

  • 스프링에서 사용하는 JPA는 JPA를 이용하는 Spring Data JPA 프레임워크



🎋 Domain


src/main/java/com.test.spring.boot_crud/domain/posts/Posts.java

package com.test.spring.boot_crud.domain.posts;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@NoArgsConstructor
@Entity
public class Posts {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 500, nullable = false)
    private String title;

    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;

    private String author;

    @Builder
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

}


  • @Getter : Lombok 어노테이션 / 클래스 내 모든 필드의 Getter 메소드 생성

  • @NoArgsConstructor : Lombok 어노테이션 / 기본 생성자 자동 생성

  • @Entity : JPA 어노테이션 / 테이블과 링크될 클래스임을 나타냄

  • @Id : 해당 테이블의 PK 필드

  • @GeneratedValue(strategy = GenerationType.IDENTITY) : 데이터베이스에 키 생성방법을 위임 / AUTO_INCREMENT

  • @Column : 테이블의 컬럼 (선언하지 않아도 해당 클래스의 필드는 모두 테이블의 컬럼이 되지만, 기본값 외에 추가 변경 사항이 있을 경우 사용)

  • nullable = false : 기본값은 true / false = Not Null

  • @Builder : 해당 클래스의 빌더 패턴 클래스 생성 / 생성자 위에 선언 시 생성자에 포함된 필드만 포함

    • 빌더 패턴(Builder Pattern) : 생성 패턴의 하나로, 복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리하여 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴



🎋 JPA Repository


src/main/java/com.test.spring.boot_crud/domain/posts/PostsRepository.java (interface)

package com.test.spring.boot_crud.domain.posts;

import org.springframework.data.jpa.repository.JpaRepository;

public interface PostsRepository extends JpaRepository<Posts, Long> {
}


  • 스프링부트는 Entity의 기본적인 CRUD가 가능하도록 JpaRepository 인터페이스를 제공

  • @Repository 등의 어노테이션을 추가 할 필요 없이, Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속하기만 하면 됨

  • extends JpaRepository<T, ID> : <Entity클래스, Id필드타입>

Categories:

SpringBoot