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 (유튜브) , 스파르타코딩클럽 제공 강의
'프로그래밍 > SpringBoot' 카테고리의 다른 글
JPA (3) - Create, Read, Update, Delete - Service (0) | 2022.05.22 |
---|---|
JPA (2) - 생성일자, 수정일자 (0) | 2022.05.22 |
Controller VS RestController (0) | 2022.05.21 |
스프링 버전 GA/RC/M/SNAPSHOT의 의미 (0) | 2022.05.21 |
그레들(Gradle)이란? (0) | 2022.05.21 |