JPQL 과 QueryDSL 문법 비교 및 Q-Type활용
·
Back-End/JPA
https://www.inflearn.com/course/querydsl-%EC%8B%A4%EC%A0%84/dashboard 실전! Querydsl - 인프런 | 강의 Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, 복잡한 쿼리, 동적 쿼리는 이제 안녕! Querydsl로 자바 백엔드 기술을 단단하게. 🚩 본 강의는 로드맵 과정입니다. 본 강의는 자바 백엔 www.inflearn.com 테스트 초기 설정 @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; @BeforeEach public void before() { queryFactory = new JPAQueryFacto..
JPA 활용 - 컬렉션 조회 최적화
·
Back-End/JPA
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 - 인프런 | 강의 스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., 스프링 부트, 실무에서 잘 쓰고 싶다면? 복잡한 문제까지 해결하는 힘을 길러보세요 www.inflearn.com 주문내역에서 주문한 상품 정보를 추가로 조회해보자 Order 기준으로 컬렉션인 OrderItem 와 Item 이 필요 주문 조회 V1 - 엔티티 직접 노출 @RestController @RequiredArgsConstructor public class OrderApiController { private final OrderRepository orderRepository; @GetMapping(..
JPA - 값 타입(1)
·
Back-End/JPA
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자 www.inflearn.com JPA의 데이터 타입 엔티티 타입 @Entity로 정의하는 객체 데이터 변화해도 식별자로 지속 추적 가능 예) 회원 엔티티의 키나 나이 값이 변해도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입 혹은 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 ..
JPA 활용 - 지연 로딩과 조회 성능 최적화
·
Back-End/JPA
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 - 인프런 | 강의 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 - 인프런 | 강의 스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다., 스프링 부트, 실무에서 잘 쓰고 싶다면? 복잡한 문제까지 해결하는 힘을 길러보세요 www.inflearn.com 간단한 주문 조회 V1 - 엔티티 직접 노출 @GetMapping("/api/v1/simple-orders") public List ordersV1() { List all = orderRepository.findAllByString(new OrderSearch()); return all; } 문제점 - 무한루..
JPA - 즉시 로딩과 지연 로딩
·
Back-End/JPA
지연 로딩과 즉시 로딩 즉시 로딩 엔티티를 조회할 때, 연관된 엔티티도 같이 조회 → 가능하면 조인 쿼리를 사용해서 쿼리한번만 사용 em.find(Member.class, “member1”) 호출시, 회원 엔티티와 연관된 팀 엔티티도 함께 호출됨 설정 방법 : @ManyToOne(fetch = FetchType.EAGER) 지연 로딩 연관된 엔티티를 실제 사용할 때 조회 → 프록시 객체 사용 member.getTeam().getName() 처럼 조회한 팀 엔티티를 실제 사용하는 시점에 SQL이 호출되어 팀 엔티티를 조회 설정 방법 : @ManyToOne(fetch = FetchType.LAZY) 지연로딩을 이용한 프록시 조회 지연 로딩 설정 @Entity public class Member @Id @Ge..
JPA - 프록시란?
·
Back-End/JPA
JPA에서의 프록시 JPA에서 엔티티를 조회할 때, EntityManager.find() 를 이용해서 조회하게 되는데, 만약 해당 엔티티가 영속성 컨텍스트에 존재하지 않으면, 데이터베이스에 조회를 요청하게 된다. 엔티티를 실제로 사용하는 시점까지 데이터베이스 조회를 미루고 싶다면, EntityManager.getReference() 메소드를 사용하면 된다. 해당 메서드는 DB를 조회하지않고, 실제 엔티티 객체를 생성하지도 않는데, 데이터 베이스 접근을 위한 프록시 객체를 반환해준다. 프록시의 사용 프록시 클래스는 실제 클래스를 상속 받아서 만들어지므로 진짜 객체인지, 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객체의 참조(target)을 보관 프록시객체는 실제 객체의 메소드를 호출..
JPA - @MappedSuperclass, BaseEntity란?
·
Back-End/JPA
@MappedSuperclass 공통 매핑 정보가 필요할 때 사용한다. 주로 사용하는 컬럼인 id, name, 작성일, 등록자 등의 정보를 담은 공통으로 사용하는 정보를 모아서 작성하여야하는 코드를 줄여준다. 특징 상속관계 매핑X 엔티티X, 테이블과 매핑X 부모 클래스를 상속 받는 자식클래스에 매핑 정보만 제공 조회, 검색 불가(em.find(BaseEntity) 불가) 직접 생성해서 사용할 일이 없으므로 추상 클래스를 권장 구현 코드 @MappedSuperclass @Getter @Setter public abstract class BaseEntity { private String createBy; private LocalDateTime createDate; private String lastModif..
JPA - 상속관계 매핑
·
Back-End/JPA
참고 해당 글은 김영한님의 자바 ORM 표준 JPA 프로그래밍을 공부하며 작성한 글입니다. https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 상속관계 매핑 자바 객체에는 상속 관계가 존재하지만, 관계형 데이터베이스에서는 상속 관계가 없다. 데이터적으로 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하여 객체의 상속관계 매핑에 사용한다. 상속 관계..
JPA - 다대일, 일대다, 다대다 매핑
·
Back-End/JPA
참고 해당 글은 김영한님의 자바 ORM 표준 JPA를 공부하며 작성한 글입니다. https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 다대일[N:1] 다대일 단방향 가장 많이 사용하는 연관관계 다대일 양방향 ‘다(many)’ 쪽에 외래 키가 가게되고, 연관관계의 주인이 된다. 양쪽을 서로 참조하도록 개발한다. 일대다[1:N] 일대다 단방향 테이블 일대다 관계는 ..
JPA - DB에 JSON 및 List값 넣기
·
Back-End/JPA
0. 해당 기능을 사용하게 된 배경 DB에 3개의 공통된 값을 가지는 17개의 리스트형 데이터를 받아서 넣어줘야 할 일이 생겼는데, 이를 해결하기 위해서는 3개 + α(Id, 생성시간 등)의 컬럼을 가지는 17개의 엔티티를 생성 하던가, 51가지 + α(Id, 생성시간 등) 의 컬럼을 가지는 하나의 테이블을 생성하여야 했는데, 이를 컨트롤 하기에는 DB에 부담이 너무 많이 갈 것으로 판단하여, 데이터를 한 컬럼에 JSON 형태로 넣기로 결정하였습니다. 1. 환경 및 라이브러리 설치 해당 포스팅은 MariaDB를 사용한 환경이며 라이브러리를 설치하기 전에 사용하는 DB와 맞는 hibernate 버전을 설치해주시면 됩니다. https://github.com/vladmihalcea/hypersistence-u..