JPA
-
N+1 문제와 해결방법JPA 2022. 3. 17. 23:37
N+1 문제와 해결방법 N+1 문제를 알아보고 이를 해결할 수 있는 방법을 알아보자. 해당 블로그 글의 영상: 유투브 영상 N+1 문제 Join이 없는 자료 리스트 { "isSuccess": true, "code": 1000, "message": "요청에 성공하였습니다.", "result": [ { "restaurantId": 2, "thumbnail": "https://user-images.githubusercontent.com/54254402/128039334-e2f7c7be-3caf-41f4-9df0-2605e1b18761.jpg", "discountValue": null, "name": "매운국물떡볶이-관악점", "grade": 4.9, "reviewCount": 200, "deliveryTime..
-
JPA @Query 사용JPA 2022. 3. 14. 00:27
@Query 사용 @Query를 사용해서 Repository에서 쿼리문(DML)을 수행하는 메서드를 만들어보자. 어노테이션 @Modifying JPA가 지원하는 Select 구문 외에 DML(insert, update, delete)를 수행하기 위해선 @Modifying 어노테이션이 필요하다. @Query(value = "쿼리문", nativeQuery = true) @Query를 선언한 뒤, value에 사용할 쿼리문을 입력하고, nativeQuery를 true로 설정해야 한다. 예시 FeedbackRepository import com.vividswan.studymate.model.Feedback; import org.springframework.data.jpa.repository.JpaReposit..
-
JPA MappedSuperclass로 Entity 상위 클래스 생성JPA 2022. 3. 14. 00:17
MappedSuperclass로 Entity 상위 클래스 생성 @MappedSuperclass를 이용하여 Entity들의 상위 클래스를 생성하여 중복 코드를 줄여보자. @CreatedDate Model 객체의 Entity를 생성할 때, 생성된 시간을 저장하고 싶으면 다음과 같은 속성을 Entity에 추가하면 된다. @CreatedDate private LocalDateTime createDate; Entity에 다음과 같은 속성을 추가하고, 이 Entity를 생성하면, DB에 다음과 같은 칼럼이 저장된다. 해당 데이터를 만든 시간이 DB에 저장된다. 생성 시간이 필요 없는 Entity가 있을까?? 아마 웬만한 Entity는 모두 생성 시간이 필요할 것이다. 그렇다고 똑같은 @CreateDate 코드를 각..
-
JPA에서 Pageable로 페이지 처리하기JPA 2022. 3. 13. 01:40
Pageable로 페이지 처리하기 Pageable을 이용해 JPA에서 페이지 단위로 데이터를 받아보자. TaskRepository Task라는 모델을 받는 TaskRepository를 만들고, 페이지 단위로 Task를 받도록 해보자. import com.vividswan.studymate.model.Task; import org.springframework.data.jpa.repository.JpaRepository; public interface TaskRepository extends JpaRepository { } 우선 JpaRepository을 Task 타입과 Task의 PK 타입으로 제네릭 하여 상속받는 인터페이스를 작성하면, Task Entity에 대한 CRUD 메서드를 호출할 수 있는 Tas..
-
ORM(Object Relational Mapping)JPA 2022. 3. 13. 01:20
ORM(Object Relational Mapping) 객체지향 언어로 관계형 데이터 베이스를 이용해 개발할 때 필요한 ORM을 알아보자. ORM 이란? Object Relational Mapping : 객체 관계 매핑 이름 그대로 객체를 관계형 데이터 베이스에 맞게 매핑해주는 것이다. 더 풀어서 얘기하면 객체지향과 관계형 데이터베이스의 패러다임 불일치를 해결해 주고 객체로 데이터 베이스 모델을 만들어주는 것이다. 객체지향과 관계형 데이터베이스의 패러다임 불일치 웹사이트를 만든다고 가정해보자. 웹사이트를 이용할 User가 있고, 그 User는 웹사이트에서 자기가 관리해야 하는 일(Task)이 필요하다고 하자. RDB에선 User Table과 Task Table을 만들고, Task 테이블에서 User의 P..
-
JPA 엔티티 어노테이션JPA 2022. 3. 12. 19:45
JPA Entity Annotation JPA로 데이터베이스와 매핑될 엔티티를 작성할 때 필드에 필요한 어노테이션을 알아보자. @Id @Id는 필드와 Primary Key를 매핑할 때 쓰는 어노테이션이다. @Id로 매핑을 해준 뒤, PK 생성에 대한 전략을 정할 수 있다. @GeneratedValue(strategy = GenerationType.전략 방법) 의 어노테이션으로 PK 생성 전략을 정할 수 있다. 전략의 종류는 다음과 같다. IDENTITY : MySQL의 Auto_Increment 방식이다. 데이터베이스가 1씩 증가시키며 자동으로 생성해 준다. SEQUENCE : 오라클의 시퀀스 오브젝트 방식을 사용한다. TABLE : 키 생성용 테이블을 만들어서 생성하는 방식이다. AUTO : JPA에 ..
-
JPA에서 Optional 처리JPA 2022. 3. 11. 12:04
Optional 처리 JPA의 Repository에서 조회할 때 나오는 Optional 타입을 처리해보자. Service 웹 애플리케이션 계층 구조 중 서비스 계층은 도메인에 대한 정보를 리포지터리에서 조회하고, 정보를 가공하여 컨트롤러로 보내주는 일을 한다. 이때, JPA의 리포지터리에서 find를 하면, 찾고자 하는 객체를 return 하는 것이 아닌 Optional 타입의 객체를 리턴한다. Optinal Optional 타입의 객체를 리턴하는 이유는 서비스에서 조회하고자 하는 도메인에 관한 정보가 없을 때, 단순히 null을 리턴하는 게 아니라, 서비스단에서 상황에 맞는 프로그래밍을 할 수 있도록 제공해 주기 위함이다. Optional 타입으로 리턴할 때 메서드 체인으로 처리할 수 있는 메서드는 다..
-
JPA 양방향 무한 참조JPA 2022. 3. 10. 03:04
양방향 무한 참조 JPA를 이용할 때 발생할 수 있는 무한 참조를 알아보고 해결해보자. Post, Reply 게시물과 댓글을 위한 Entity가 있다고 해보자. package com.vividswan.blog.model; import java.sql.Timestamp; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; im..