이번 글은 필자가 회사에서 가장 많이 쓰는 QueryDSL에 대해 기본적인 문법에 대해 코드로 정리하고 소개할려고 한다. Querydsl 의 기본문법 이번 글은 Querydsl의 기본 문법에 대해 글을 적어 볼려고 한다. 먼저 Querydsl과 JPQL을 비교해보겠다. Querydsl vs JPQL JPAQueryFactory qf; @Test public void startJPQL(){ // JPQL을 사용한 member1 찾기 String qlString = "select m from Member m " + "where m.username = :username"; Member findMember = em.createQuery(qlString, Member.class) .setParameter("use..
JPA를 사용하면서 영속성 컨텍스트에 대해 이해하지 못하면 항상 예기치 못한 사이드 이펙트를 만나곤 한다. 그래서 영속성 컨텍스트에 대해 공부하면서 간단히 정리해본 글이다. 클래스 수준 아키텍처 아래의 이미지는 JPA의 클래스 레벨 아키텍처 입니다. 여러가지 코어적인 JPA의 클래스와 인터페이스를 볼 수 있습니다. EntityManagerFactory - EntityManager 클래스의 팩토리 클래스입니다. 이 클래스로 EntityManager 클래스의 인스턴스를 생성하고 관리 EntityManager - 인터페이스 입니다. 객체에 대한 영속성 관리작업을 합니다. Query 인스턴스를 생성하는 팩토리 처럼 작동합니다. Entity - 영속 객체입니다. 이 객체의 스펙에 의해서 데이터베이스에 기록될 객체..
Auditing Entity를 생성 변경할 때 변경한 사람과 시간을 추적하고 싶으면? 등록일 수정일 등록자 수정자 스프링 데이터 JPA 사용 설정 @EnableJpaAuditing -> 스프링 부트 설정 클래스에 적용해야함 @EntityListeners(AuditingEntityListener.class) -> Entity에 적용 사용 어노테이션 @CreatedDate @LastModifiedDate @CreateBy @LastModifiedBy @EntityListeners(AuditingEntityListener.class) @MappedSuperClass @Getter public class BaseEntity{ @CreatedDate @Column(updatable = false) private ..
Spring Data Jpa Entity를 DTO로 변환 Entity에서 DTO 페치조인 JPA에서 DTO 바로 조회 Auditing Pageable API 개발 고급 정리 권장순서 Entity 조회 방식으로 우선 접근 페치조인으로 쿼리수를 최적화 컬렉션 최적화 페이징 필요 hibernate.default_batch_fetch_size, @Batchsize로 최적화 페이징 필요 X -> 페치 조인 사용 Entity 조회 방식으로 해결이 안되면 DTO로 조회 방식 사용 Entity를 DTO로 변환 @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAll(); List result = o..
N+1 쿼리 문제의 원인? Spring Data JPA 에서 제공하는 Repository의 findAll(), findById()등과 같은 메소드를 사용하면 바로 DB에 SQL 쿼리를 날리는 것이 아닙니다. JPQL 이라는 객체지향 쿼리 언어를 생성, 실행시킨 후 JPA는 이것을 분석해서 SQL을 생성, 실행하는 동작에서 N+1 쿼리 문제가 발생한다. JPQL 입장에서는 LAZY로딩, EAGER 로딩과 같은 글로벌 패치 전략을 신경쓰지 않고 JPQL만 사용해서 SQL을 생성한다. N+1 쿼리 문제는 언제 발생할까? 발생하는 경우는 다음과 같은 2가지 경우가 있다. 두개의 Entity가 1:N 관계를 가지며 JPQL로 객체를 조회할때 EAGER 전략으로 데이터를 가지고 오는 경우 LAZY 전략으로 데이터를..
JPA 기본 정리 JPA-Entity 매핑 Fetch Join 기본키 전략 Entity 매핑 속성 : name JPA에서 사용할 엔티티 이름 지정 기본값 : 클래스 이름을 그대로 사용 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. 1.Table 매핑 @Table은 엔티티와 매핑할 테이블 지정 name - 매핑할 테이블 이름 catalog - 데이터베이스 catalog 매핑 schema - 데이터베이스 schema 매핑 uniqueConstraints - DDL 생성 시에 유니크 제약조건 생성 2. 데이터베이스 스키마 자동생성 - 주의 운영 장비에는 절대 create, create-drop, update 사용 X 테스트 서버는 update 또는 validate 스테이징과 운영 서버는 validate..
- Total
- Today
- Yesterday
- 쓰레드
- 공간쿼리
- 스프링
- 인덱스
- database
- R-Tree
- 네트워크
- DispatcherServlet
- TCP
- lock
- thread
- GIS
- Spring Security
- db
- java
- Excel
- jpa
- spring mvc
- spring boot
- 비동기
- github
- Index
- oauth2
- mysql
- 데이터베이스
- jenkins
- 영속성 컨텍스트
- 논블로킹
- 다운로드
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |