JPA
- JPA(Java Persistence API)
- JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
- JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다.
- JPA를 사용하면 개발 생산성을 크게 높일 수 있다.
- JPA는 자바 영역에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.
- 즉, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.
📌 1. JSP -> gradle에 추가하기
1-1. 프로젝트에 build.gradle 열기
1-2. dependencies에 JPA 코드 추가
✔ JPA 라이브러리에는 JDBC 라이브러리를 포함하고 있어 주석처리
- 추가해줘야 할 코드
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
1-3. Gradle Refresh 하기
- build.gradle 우클릭 > Gradle > Refresh Gradle Project
📌 2. JPA 설정하기
2-1. 프로젝트에 application.properties 열기
2-2. JPA 설정
#jpa
- spring.jpa.show-sql=true
- spring.jpa.hibernate.ddl-auto=none
2-3. 리포지터리(@Repository) & 트랜잭셔널 (@Transactional)
- Repository 클래스 생성 후 @Repository 어노테이션 추가하기
- 만들어 둔 Service 클래스에 @Transactional 어노테이션 추가하기
2-4. 엔티티(@Entity)
- DB와 1:1 대응하는 DTO 클래스에 JPA가 관리한다는 의미로 @Entity 어노테이션을 추가해 준다.
2-5. @Id & 시퀀스(Sequence)
- PK값인 변수에 @Id 어노테이션을 추가해 JPA에 알려주는 것
- PK값에 시퀀스 사용을 위해 @GeneratedValue 어노테이션 추가
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySequence")
@SequenceGenerator(name = "mySequence", sequenceName = "member_seq", allocationSize = 1)
✔ @Id - 내가 직접 셋팅해주는 직접 할당
✔ @GeneratedValue
- SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE / @SequenceGenerator 필요
✔ @SequenceGenerator 속성
-
name : 식별자 생성기 이름 / 필수
-
sequenceName : DB에 등록되어있는 시퀀스 이름
-
initialValue : DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정한다. / 기본값 : 1
-
allocationSize : 시퀀스 한 번 호출에 증가하는 수 (성능 최적화에 사용) 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야한다. / 기본값 : 50
📌 3. JPA Repository에 EntityManager 주입하기
✔ JPA는 EntityManager로 뭐든지 동작 한다.
📌 4. JPQL(Java Persistence Query Language)
- 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음
- JPA는 JPQL을 분석 후 적절한 SQl을 만들어 데이터베이스를 조회