[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필드타입>