1. JPA (Java Persistence API)란?

  • JPA는, SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기입니다.
  • 자바 퍼시스턴스 API 또는 자바 지속성 API는 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API이다.
  • 자바에 있는 데이터를 영구히 저장(기록)할 수 있는 환경을 제공하는 API - 데이터베이스
  • ORM 기술이다.
  • 반복적인 CRUD 작업을 생략하게 해준다.
  • 영속성 컨텍스트를 가지고 있다. (데이터베이스 관련)
  • DB와 OOP의 불일치성을 해결하기 위한 방법론은 제공한다. (DB는 객체저장 불가능, 자바는 객체저장 가능) 
    • FK자리에 Object를 삽입 (ORM) - 데이터베이스에 밀어넣을 때 JPA가 자동으로 FK를 집어넣어준다.
  • OOP의 관점에서 모델링을 할 수 있게 해준다 (상속(Timestamped 클래스)), 콤포지션, 연관관계)
  • 유지보수가 용이하다 - 데이터베이스 migration이 용이하다

* Persistence 영속성 - 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미합니다.

RAM에 저장된 데이터는 휘발성 (컴퓨터가 꺼지면 사라짐)

하드디스크에 저장된 데이터는 비휘발성 (영구적 저장)

 

** API - 인터페이스를 통해서 프로그래밍을하면 어플리케이션(프로그램)이 만들어진다

어플리케이션 (A)

프로그래밍 (P)

인터페이스 (I) - 상하관계가 존재하는 약속 (만든사람이 사용할 수 있는 조건을 정함)

 

*** ORM (Object Relational Mapping)

Object를 데이터베이스에 연결하는 기술

클레스를 통해 데이터베이스를 만든다.

 

 

2. 사용법 

 

  2-1) dependency 추가 (gradle) - 프로잭트 생성시 추가하지 않았다면 build.gradle에 추가

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

 

  2-2) domain 패키지 생성 -> 테이블로 사용할 Class / Interface 생성

경로

  • Class (예시_Course)
import lombok.NoArgsConstructor;
import javax.persistence.*;

@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.
@Entity // 테이블임을 나타냅니다.
public class Course {

    @Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
    @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
    private Long id;

    @Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
    private String title;

    @Column(nullable = false)
    private String tutor;
    
    public Long getId() {
    	return this.id;
    }

    public String getTitle() {
        return this.title;
    }

    public String getTutor() {
        return this.tutor;
    }

    public Course(String title, String tutor) {
        this.title = title;
        this.tutor = tutor;
    }
}

* Entity는 테이블이다

* JPA를 통해 생성된 테이블의 컬럼 자료형 (MySQL)

  • Interface (CourseRepository)
    • CourseRepository를 통해서 디비 사용
// Course 클래스에 ID의 타입이 Long이다
public interface CourseRepository extends JpaRepository<Course, Long> {
}

경로

 

** Interface 란?

  • JPA는 Repository를 통해서만 사용할 수 있습니다.
  • 인터페이스는 클래스에서 멤버가 빠진, 메소드 모음집이라고 보시면 됩니다.

 

  • SQL이 보이도록 application.properties 세팅
spring.jpa.show-sql=true

 

  • 사용 예시
	Course course1 = new Course("웹개발의 봄 Spring", "홍길동");
	repository.save(course1);  // insert into course ~

	List<Course> courseList = repository.findAll();  // select * from course
	for (int i = 0; i < courseList.size(); i++) {
		Course c = courseList.get(i);
		System.out.println(c.getTitle());
		System.out.println(c.getTutor());
	}

 

 

 

 

참조 강의 : 메타코딩 - springboot with JPA (유튜브) , 스파르타코딩클럽 제공 강의

 

+ Recent posts