상똥이의 Back-End 공부방

[Spring boot] JPA 본문

Spring

[Spring boot] JPA

상똥백 2023. 11. 10. 13:50

 

[1. JPA(Java Persistence Api)란]

1. 간단한 개념

- 자바 : 객체지향 목적

- 관계형 데이터베이스 : 데이터를 정규화해서 잘 보관하는 것이 목적

- 즉, 자바와 관계형 데이터베이스의 패러다임이 불일치

- 이를 해결하기 위해 중간에서 둘을 매핑해주는 ORM(Object Relational Mapping)이 등장함

- JPA는 이 ORM 기술 표준의 명세

- 즉, JPA는 인터페이스 (구현해줄 뭔가가 필요한)

- JPA 구현체

   - Hibernate (가장 대표적)

   - EclipseLink

   - DataNucleus

   - OpenJpa

   등등

 

2. JPA사용 시 장점

- 특정 데이터베이스에 종속되지 않음

   - 각각 쿼리문이 다른 데이터베이스로 바꿔도 그 종류만 알려준다면 문제되지 않음

- SQL문을 직접 작성하지 않아도 됨

   - JPA 사용시 테이블과 매핑된 클래스에 필드만 추가하면 관리 용이 

 

[2. JPA 동작 방식]

0. 테이블 형식

1. 위의 테이블을 만들기 위한 서식

(1) 데이터베이스 테이블과 매핑시키기

- 클래스 레벨에 @Entity 붙여주기 : 이 어노테이션이 붙은 클래스는 JPA에서 관리되는 엔티티임을 명시함

- 클레스 레벨에 @Table(name = 테이블명)붙여주기 : 이 어노테이션은 어느 데이터베이스 테이블과 연결되는지 명시함

(2) 각 속성 정의하기

- 모든 속성들을 클래스 안에 선언한다

- 속성(데이터베이스의 열, 필드) 선언하기

   - @Column(nullable = false) : 널값을 가지지 못하게 한다. 기본설정은 true이므로 필요할때에만 사용

   - @Column(length = 숫자) : String 길이를 지정한다. 기본값은 255

   - @Column(name = 데이터베이스_속성이름) : 코드의 속성과 데이터베이스의 속성을 연결/ 코드에서 작성한 이름과 데이터베이스에서 사용할 속성명이 다를 때 사용한다.

   - @Column(updatable = false) : 속성의 변경이 가능한지 설정/ 기본값은 true이므로 필요할때만 사용

- 기본키(PK) 선언하기

   - @Id : 기본키임을 명시한다

   - @GeneratedValue(strategy = GenerationType.___) : 기본키가 어떻게 자동생성되는지 결정한다.

      - GenerationType.AUTO : JPA가 백그라운드에서 데이터베이스에 따라 자동으로 적절한 기본키 생선 전략을 선택

      - GenerationType.IDENTITY : 자동증가, MySQL에서 일반적으로 사용

      - GenerationType.SEQUENCE : 시퀀스를 이용해서 생성

      - GenerationType.TABLE : 시퀀스를 지원하지 않을 때 사용