JPA - QueryDSL을 이용한 동적쿼리
·
TIL
🤩 QueryDSL이 뭔지 모르시다면 !2024.11.15 - [TIL] - JPA - QueryDSL 🤜 요구사항일정을 검색하는 기능검색 조건- 일정 제목으로 검색할 수 있으며 부분적으로 일치해도 검색 가능- 일정의 생성일 범위로 검색할 수 있다.- 일정 담당자의 닉네임으로 검색 가능하며 부분적으로 일치해도 검색 가능- 일정 제목, 해당 일정의 담당자 수, 해당 일정의 총 댓글 갯수를 페이징 처리되어 반환되도록한다. 🤗 QueryDSL의 동적쿼리 방법QueryDSL의 동적쿼리 방법으로는 Boolean Builder 방법과 BooleanExpression 방식으로 나뉘는데 이번 검색 기능을 구현하며BooleanExpression을 이용하여 구현하였기에 Boolean Builder 방법은 간단하게 사..
JPA - QueryDSL
·
TIL
👻 QueryDSL이란 ?SQL, JPQL 등을 코드로  작성할 수 있도록 해주는 프레임워크이며, 쿼리를 type-safe(컴파일시 에러 체크 가능)하게 Java 코드로 작성할 수 있다. JPQL 이란?JPA에서 지원하는 다양한 쿼리 방법 중 가장 단순한 조회 방법으로, SQL의 경우에는 DB 테이블을 대상으로 쿼리를 질의하지만, JPQL은 엔티티 객체를 대상으로 쿼리를 질의JPQL의 경우 아래 코드에서 볼 수 있듯, 쿼리를 문자열로 입력하므로 오타가 발생하면 관리가 어렵고, type-safe 불가능하여 런타임에서 해당 쿼리가 실행되어야만 오류를 발견할 수 있다는 단점이있다.@Query("select t from Todo t inner JOIN fetch t.user where t.modifiedAt ..
JPA - 복합키와 식별 관계 매핑
·
TIL
JPA 심화 강의를 들으면서 코드를 보다가 엔티티 클래스에 처음보는 @EmbeddedId와 @MapsId 어노테이션이 있길래 뭔지 궁금해서 찾아봤는데 @EmbeddedId는 식별자 클래스를 생성할 때 사용하는 어노테이션이며, @EmbeddedId를 식별 관계로 매핑할 때 @MapsId를 사용하면 된다고한다고 하는데이렇게만 봐서는 잘 모르겠어서  복합키와 식별 관계에 대해 알아보며,  정리한 글입니다.식별, 비식별 관계DB에서는 FK가 기본 키에 포함되는지 여부에 따라 식별, 비식별 관계로 구분된다.식별 관계 : 부모 테이블의 기본 키를 받아서 자식 테이블의 기본 키 와 외래 키 로 사용하는 관계비식별 관계 : 부모 테이블의 기본키를 받아서 자식 테이블의 외래 키로만 사용하는 관계외래키의 null을 허용하..
JPA - 일정관리 앱 만들기
·
TIL
과제 내용이번 과제는 JPA를 활용하여 일정관리 앱을 만드는 것이였습니다. 이번에는 각각의 API마다 정리를 했으니 블로그 봐주세요 !!https://haseung22.tistory.com/ haseung22의 블로그haseung22 의 블로그 입니다.haseung22.tistory.com  과제를 하며 있었던 트러블 슈팅배경과제의 요구사항 중 일정 담당 유저 (매니저)와 일정의 연관관계를 N:M으로 하라는 요구사항이 있었는데이걸 어떻게 할지 고민하다가 처음에는 User와 Todo 테이블 이외에 일정 담당 유저를 관리하는 Manger 테이블과 일정과 그 Manager 테이블을 N:M으로 연관 짓기 위하여 Management라는 테이블을 하나 또 만들어서 연관관계를 맺어줬었다.근데 코드를 계속 보다 보니 ..
JPA - 회원가입 로그인
·
TIL
저번 포스팅에 올렸던  JwtUti를 이용하여 회원가입과 로그인을 구현하였다. 1. 엔티티 생성일정과 일정 담당유저와의 연관관계를 맺으라는 요구사항이 있어 OneToMany를 이용하여 1:N관계를 맺었다.@Entity@Getter@Table(name = "user")@NoArgsConstructor(access = AccessLevel.PROTECTED)public class User extends AuditingDate { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String email; @Col..
JPA - JWT와 필터 구현하기
·
TIL
JwtUtil이번 과제에서는 JWT 토큰을 이용한 인증, 인가를 구현해야한다. 그렇기 때문에 JWT 토큰 생성만을 위한 Util 클래스를 만들었다.@Componentpublic class JwtUtil { public static final String AUTHORIZATION_HEADER = "Authorization"; public static final String AUTHORIZATION_KEY = "auth"; public static final String BEARER_PREFIX = "Bearer "; private final long ACCESS_TOKEN_TIME = 60 * 60 * 1000L; // 60분 @Value("${jwt.secret.key}") ..
영속성 컨텍스트
·
TIL
영속성 컨텍스트란?영속성 컨텍스를 쉽게 표현하자면 Entity를 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간입니다.JPA에서는 테이블과 매핑되는 Entity 객체 정보를 영속성 컨텍스트를 통해 애플리케이션 내에서 오래 지속되도록 보관합니다.영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요합니다. 영속성 컨텍스트 기능1차 캐시쓰기 지연 저장소객체 동일성 보장 1차캐시 영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있는데 이를 1차 캐시라고 부릅니다.캐시 저장소는 Map 자료구조 형태로 Key에는 @Id로 매핑한 기본키를,Value에는 Entity 객체를 저장합니다.em.persist(memo); // 메서드 호출 시 memo Entity 객체를 ..
페이징 조회 - Pageble / PageRequest
·
TIL
일정을 Spring Data JPA의 Pageable과 Page 인터페이스를 활용하여 페이지네이션을 구현페이지 번호와 페이지 크기를 쿼리 파라미터로 전달하여 요청하는 항목을 나타냅니다. 할일 제목, 할일 내용, 댓글 개수, 일정 작성일, 일정 수정일, 일정 작성 유저명 필드를 조회합니다.디폴트 페이지 크기는 10으로 적용합니다. 일정의 수정일을 기준으로 내림차순 정렬합니다.페이징 조회를하기위해 Spring Data JPA에서 제공하는 Pageble 인터페이스와 PageRequest 클래스를 사용하였습니다. PageblePageable은 데이터를 페이지 단위로 검색하고 제어하는 인터페이스입니다.Pageable은 페이지 처리에 필요한 정보만 전달하는 용도이며, 실제 객체를 생성할 때는PageRequest 클..