Everyday Dev System

8월 첫째주 개발 공부 정리 본문

내배캠 주요 학습/TIL : Today I Learned

8월 첫째주 개발 공부 정리

chaeyoung- 2023. 8. 4. 22:03

 

 

1. Spring Framework와 JPA를 사용한 DB 작업

  • EntityManager는 JPA 인터페이스의 일부, Entity를 DB와 맵핑해주는 ORM 기술을 정의한 인터페이스이다.
@Repository
public class ChannelRepository {

    @PersistenceContext
    EntityManager entityManager;
    // persistenceContext 를 주입받아서 EntityManager 를 사용한다.
    
    public Channel insertChannel(Channel channel){
        entityManager.persist(channel);
        return channel;
    }
    
    public Channel selectChannel(Long id) {
        return entityManager.find(Channel.class,id);
    }

}

2023.07.31 - [내배캠 주요 학습/JPA 심화] - Spring Framework와 JPA 활용

 

Spring Framework와 JPA 활용

package me.chaeyoung.jpa.channel; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.stereotype.Repository; @Repository public class ChannelRepository { @PersistenceContext EntityManager enti

cdev.tistory.com

 

 

 

 

2. N : 1 양방향 관계 설정 코드

2023.07.31 - [내배캠 주요 학습/JPA 심화] - JPA) N : 1 관계 맵핑 (thread : Channel)

 

JPA) N : 1 관계 맵핑 (thread : Channel)

스레드가 채널 안에 여러개가 있으므로, 다대1 양방향 관계입니다. 아래와 같이 Entity 클래스 코드를 작성할 수 있습니다. 1. Channel 엔티티 클래스 코드 public void addThread(Thread thread){ this.threadList.add

cdev.tistory.com

2023.07.31 - [내배캠 주요 학습/JPA 심화] - JPA) N : 1 관계 맵핑 (Thread : Channel : User)

 

RawJPA 다대다 관계 테스트 코드

package me.chaeyoung.jpa.userChannel; import me.chaeyoung.jpa.channel.Channel; import me.chaeyoung.jpa.channel.ChannelRepository; import me.chaeyoung.jpa.user.User; import me.chaeyoung.jpa.user.UserRepository; import org.junit.jupiter.api.Test; import org.

cdev.tistory.com

 

 

 

3. 복합키

2023.07.31 - [내배캠 주요 학습/JPA 심화] - JPA 복합키 설정하기 - @IdClass

 

JPA 복합키 설정하기 - @IdClass

PK를 없애고 FK 두개로 복합키를 설정하는 방법이다. 2가지의 방식이 있는데, @IdClass로 하는 방법 먼저 소개하겠다. @EmbaddedId로 하는 방법은 다음 글을 참조하면 된다. 2023.07.31 - [내배캠 주요 학습/

cdev.tistory.com

2023.07.31 - [내배캠 주요 학습/JPA 심화] - JPA 복합키 설정하기 - @EmbeddedId

 

JPA 복합키 설정하기 - @EmbeddedId

복합키 위에 @EmbeddedId를 기재하여 사용하는 방법이다. > 1. @Embeddable 과 @EmbeddedId와 매핑 2. @MapsId("user_id") 와 @Column(name="user_id") 이 매핑이 되므로, 값이 동일 복합키 UserChannelId 클래스 코드 1. @Embedda

cdev.tistory.com

 

 

 

 

4. JpaRepository 기능 제한하기 및 추가하기

2023.07.31 - [내배캠 주요 학습/JPA 심화] - JpaRepository 기능 제한하기

 

JpaRepository 기능 제한하기

Repository의 기능을 제한하거나 추가해야 할 필요가 있다. JpaRepository는 기본적으로 모든 기능을 제공하기 때문에 리스크 따라서 원하는 기능 메소드만 구현하도록 제한해야 한다. @RepositoryDefinition

cdev.tistory.com

2023.07.31 - [내배캠 주요 학습/JPA 심화] - Repository 에 기능 추가하기

 

Repository 에 기능 추가하기

Repository 에 기능 추가하기 delete() 메소드의 내부 기능 확인하기 delete 호출 시 영속성 상태인지 확인한다. 영속성 컨텍스트에 없다면(!em.contains(entity)) 엔티티를 조회해서 영속성 상태로 바꾼다.

cdev.tistory.com

 

 

 

5. QueryDSL

2023.08.01 - [내배캠 주요 학습/JPA 심화] - QueryDsl 기초

 

QueryDsl 기초

참조 : 내배캠 JPA 심화 강의 자료 https://teamsparta.notion.site/SpringData-QueryDSL-85b57e18a5204e70b6035a319d63f866 오류 시 해결 1. QChannel 이 활성화가 안될 경우 main 메서드가 있는 클래스를 다시 실행. 2. 테스트

cdev.tistory.com

2023.08.01 - [나의 호기심] - QueryDSL에서 Q 클래스는 어디에 위치해있을까?

 

QueryDSL에서 Q 클래스는 어디에 위치해있을까?

chat GPT에도 물어보고 해당 경로로 가서 봤지만, 찾지 못했다. 결국 파일 디렉터리 하나하나 들어가서 찾아보았다. build 폴더도 아닌! out 폴더 내에 있었다. 여기서 궁금한 점이 생겼다. 위에 클래

cdev.tistory.com

 

 

 

 

6. QueryDSL 심화

2023.08.01 - [내배캠 주요 학습/JPA 심화] - QueryDSL 활용 코드

 

QueryDSL 활용 코드

Repository 인터페이스의 메소드 이름을 기반으로 쿼리를 생성하는 기능에 한계가 있는 경우, Q 클래스를 사용하여 더 복잡하고 유연한 쿼리를 작성할 수 있습니다. QueryDSL을 사용할 때, @Entity 어노

cdev.tistory.com

2023.08.01 - [분류 전체보기] - QueryDSL 수정, 삭제 배치 쿼리

 

QueryDSL 수정, 삭제 배치 쿼리

본 글은 다음 글을 참조하여 일부만 변경하여 작성하였으니, 아래 글을 먼저 확인 부탁드립니다. 아래 게시글을 참조하였고, 해당 글은 코드에 대한 자세한 설명만 추가한 글입니다. https://cherryp

cdev.tistory.com

2023.08.02 - [내배캠 주요 학습/JPA 심화] - QueryDSL의 JPAQueryFactory를 활용한 조회문

 

QueryDSL의 JPAQueryFactory를 활용한 조회문

JPAQueryFactory을 빈으로 등록하기 위해 configuration 클래스를 생성한다. package me.chaeyoung.jpa.configuration; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.Persistence

cdev.tistory.com

 

 

 

 

7. 기타 

2023.08.04 - [내배캠 주요 학습/JPA 심화] - JPA 쿼리 최적화

 

JPA 쿼리 최적화

1. JPA 가 1차 캐시(영속성 컨텍스트) 를 통해 필요없는 쿼리는 날라가지 않도록 쿼리를 최적화함. 그런데, insert와 delete 쿼리문이 다 날라가는 경우가 있다. 이때 확인해야 할 사항은? 1) 해당 함수

cdev.tistory.com

 

2023.08.04 - [내배캠 주요 학습/매일 공부] - checked, unchecked Exception - rollback 이슈

 

checked, unchecked Exception - rollback 이슈

Exception에 대한 글 2023.08.04 - [나의 호기심] - Exception 뜯어보기 Exception 뜯어보기 Exception에 대해서 자세히 살펴보겠습니다. Exception 아래 사진을 보면 Throwable 클래스를 상속한 Exception 과 Error 클래스

cdev.tistory.com

 

2023.08.04 - [나의 호기심] - Exception 뜯어보기

 

Exception 뜯어보기

Exception에 대해서 자세히 살펴보겠습니다. Exception 아래 사진을 보면 Throwable 클래스를 상속한 Exception 과 Error 클래스가 있습니다. 아래는 Exception 을 상속한 RuntimeException 입니다. 여기서 쓰인 주석

cdev.tistory.com