분류 전체보기

JPA/QueryDSL

[QueryDSL] 2. QueryDSL 문법 VS JPQL 문법 비교

JPQL과 QueryDSL 문법 비교기본 JPQL// member1 찾기String qlString = "select m from Member m where m.username = :username";Member findMember = em.createQuery(qlString, Member.class) .setParameter("username", "member1") .getSingleResult();QueryDSLQMember m = new QMember("m");Member findMember = queryFactory .select(m) .from(m) .where(m.username.eq("member1")) .fetch..

JPA/QueryDSL

[QueryDSL] 1. QueryDSL 의존성과 기본 사용법

QueryDSL 의존성Spring Version에 따라 의존성이 크게 차이가 난다. 나는 스프링 3.x 이상에서 학습을 했기에, 아래와 같이 설정을 했다.//Querydslimplementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persistence:jakarta.persistence-api"..

JPA/Spring Data JPA

[Spring Data JPA] 7. BaseEntity

엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하고 싶으면 어떻게 해야 할까?등록일, 수정일, 등록자, 수정자.. 등이 있다고 생각하자. 순수 JPA를 사용한 BaseEntity 구현 JpaBaseEntity 클래스 JPA의 @MappedSuperclass를 사용하여 생성일과 수정일을 추적할 수 있다.@MappedSuperclass는 속성만을 상속하는 방법으로, 실제 상속과 구분된다.@MappedSuperclass@Getterpublic class JpaBaseEntity {    @Column(updatable = false)    private LocalDateTime createdDate;    private LocalDateTime updateDate;    @PrePersist    pub..

JPA/Spring Data JPA

[Spring Data JPA] 6. 사용자 정의 Repository. DI 활용

이번 내용은 실무에서 정말 많이 사용한다. querydsl repository를 만들고 활용하기 좋다.실무에서는 다양한 상황에 맞추어 인터페이스와 메서드를 직접 구현할 필요가 있다.예를 들어, JPA를 사용하다가 Spring JDBC Template이나 MyBatis 등을 사용해야 할 때가 있다.Spring Data JPA의 기본 인터페이스만으로는 충분하지 않은 경우, 사용자 정의 리포지토리를 구현하여 해결할 수 있다. Spring Data JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많은데, 어떻게 해야 할까?  구현 절차1. 사용자 정의 인터페이스 생성 먼저, 구현할 메서드를 추상화한 사용자 정의 인터페이스를 생성한다.public interface MemberReposito..

JPA/Spring Data JPA

[Spring Data JPA] 5. JPA Hint & Lock

JPA Hint개념JPA Hint는 JPA의 구현체, 예를 들어 Hibernate에게 제공하는 힌트다.이는 SQL 자체에 대한 힌트가 아니라, JPA 구현체에 특정 동작을 요구하는 힌트이다. JPA는 기본적으로 Entity를 조회해와서 값을 변경하면 Dirty Checking이 일어나고 트랜잭션 커밋 시점에 이를 DB에 반영한다.만약 값을 바꿔서 화면에 뿌려주는데 DB에는 반영하기 싫을 땐 어떡할까? JPA는 이러한 기능을 제공하지 않지만 Hibernate는 이를 제공한다. 그렇기 때문에 JPA Hint를 사용한다. // JpaRepository@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))Mem..

JPA/Spring Data JPA

[Spring Data JPA] 4. @EntityGraph

JPA의 Fetch Join 이해1. EntityGraph를 이해하기 위해서는 JPA의 fetch join에 대해서 이해해야 한다.2. fetch join에 대해서 이해하려면 N + 1 문제를 이해해야 하고,3. N + 1 문제를 이해하기 위해선 FetchType.(Lazy와 Eager)와 Proxy 개념에 대한 이해가 필요하다.차근차근 가보자FetchType.Lazy와 FetchType.EAGERJPA에서 연관관계 매핑을 할 때 @xxxToMany와 @xxxToOne으로 나뉜다.여기서 xxxToMany는 기본적으로 FetchType이 Lazy이다. xxxToMany는 FetchType이 기본적으로 EAGER이다. FetchType은 EAGER와 LAZY로 나뉜다. EAGER LoadingEAGER는 본..

JPA/Spring Data JPA

[Spring Data JPA] 3. 벌크성 수정 쿼리

벌크성 수정 쿼리의 필요성JPA는 데이터를 갖고 와서 데이터가 변경되었는지 확인하는 "Dirty Checking" 작업을 한다. 이것은 한 건 한 건의 데이터들에 대한 수정을 확인한다.하지만 특정 연산에 의하여 몇 개인지 몰라 Dirty Checking이 불가능한 상황에는 어떻게 할까? 예를 들어 나이가 20 보다 적은 회원들을 모두 1살 높여야 하는 상황이라고 해보자.이런 상황에는 나이가 20보다 적은 회원들을 모두 갖고와서 수정하는 것보다, Update Query 한 번 날리는 게 효율적이다.이를 벌크성 수정쿼리라고 한다 순수 JPA에서의 벌크성 수정 쿼리public int bulkAgePlus(int age) {    return em.createQuery("update Member m set m...

JPA/Spring Data JPA

[Spring Data JPA] 2. Spring Data JPA Paging

Spring Data JPA는 데이터베이스의 페이징 처리를 추상화하여 개발자가 쉽게 페이징을 구현할 수 있도록 도와준다. 이는 기존에 데이터베이스마다 다르게 적용되던 페이징 처리 방식을 단순화시킨다.기존 페이징 처리의 어려움과거에는 데이터베이스별로 페이징 처리 방식이 달랐다.예를 들어, MySQL은 LIMIT과 OFFSET을 사용했고, Oracle은 ROWNUM을 사용했다.이러한 방식은 개발자가 직접 계산하고 구현해야 하는 어려움이 있었다.Spring Data Jpa는 이를 공통으로 추상화시켰다.Spring Data Jpa의 페이징 처리Spring Data JPA에서는 Pageable 인터페이스를 사용하여 페이징 처리를 추상화하고 간소화한다. // MemberRepositoryPage findByAge(..

JPA/Spring Data JPA

[Spring Data JPA] 1. QueryMethod

Spring Data JPA의 QueryMethodSpring Data JPA를 사용하면 복잡한 쿼리를 작성하지 않고도, 메소드 이름만으로 데이터 조회를 쉽게 할 수 있다. 이러한 기능을 제공하는 것이 바로 QueryMethod이다. QueryMethod는 메소드 이름을 분석하여 적절한 JPQL 쿼리를 생성한다. 개발을 하며 JPA Repository interface를 상속받아 사용을 한 적이 자주 있다.하지만 SpringDataJpa의 기능은 제대로 써보지 못했다. 그중에 가장 충격적이었던 QueryMethod의 종류들을 작성해보려한다. findByUsername(String username);말 그대로 이름으로 객체를 찾는 쿼리이다. 이렇게 하나의 컬럼으로 찾는 것은 많이 해보았다. 예전에 JPA에..

JPA/ORM 표준 JPA

[ORM 표준 JPA] 12. JPQL 기본 함수 정리

JPA에서의 JPQL과 SQL 사용 이해 Java Persistence API(JPA)를 사용하면서 JPQL(Java Persistence Query Language)과 SQL을 어떻게 활용하는지 이해하는 것은 중요하다.JPQL과 SQL은 각각 다른 접근 방식과 목적을 가지고 있다.JPQL의 기본 구조와 사용 JPQL은 엔티티 객체를 대상으로 쿼리를 작성한다.이는 SQL과 다르게 데이터베이스 테이블이 아닌, 엔티티 클래스에 직접 쿼리를 수행한다. 아래 쿼리는 Member 엔티티에 대해 이름에 'kim'이 포함된 모든 회원을 조회한다.기본 jpql List memberList = em.createQuery("select m From Member m where m.username like '%kim%'", ..

토이 개발 스토리
'분류 전체보기' 카테고리의 글 목록 (6 Page)