Spring Framework/Data

Hibernate는 ORM 방식으로 JDBC Raw 쿼리를 만들어주는 편리한 라이브러리입니다. ORM이란 무엇인가? Object-Relational Mapping의 약자로, "객체(Object)"와 “관계형 데이터(Relational Database)” 간의 데이터를 자동으로 매핑(Mapping) 해주는 기술입니다. Hibernate에서는 객체를 관계형 데이터로 자동 매핑하는 기술을 통해 객체와 레코드(Row) 를 일대일로 연결해 개발자가 SQL을 직접 작성하지 않고도 DB 데이터를 객체처럼 다룰 수 있는 기술을 제공합니다. Hbernate에서는 다음과 같이 EntityManager라는 클래스를 통해 객체를 데이터베이스에 저장(persist)하거나 데이터를 객체로 변환(load)할 수 있습니다.// 객체..
QueryDSL에서 Sub Query를 사용하기 위해서는 다음과 같이 JpaExpression을 통해 새로운 from절을 구성해야 합니다. 일반적으로, QueryDSL에서 Sub Query는 Select절고 Where절에서만 사용이 가능한 것으로 알고 있는데요, 그 이유는 무엇일까요?QDepartment department = QDepartment.department;QDepartment d = new QDepartment("d");queryFactory.selectFrom(department) .where(department.size.eq( JPAExpressions.select(d.size.max()).from(d))) .fetch(); JPQL 철학 JPQL은 Entity ..
JPA에서 Repository를 사용하기위해서는 JpaRespotiroy를 상속받아야 합니다. JpaRepository는 인터페이스 타입으로, 다음과 같이 Repository로 등록되면 안 되기 때문에 @NoRepositoryBean 어노테이션이 붙어있는 것을 확인할 수 있습니다. @NoRepositoryBeanpublic interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepository, QueryByExampleExecutor { void flush(); S saveAndFlush(S entity); List saveAllAndFlush(Iterable entities); void deleteA..
spring JPA를 사용하다 보면, 다음과 같이 JpaRepository를 상속한 Interface를 만들게 됩니다.interface MyBaseRepository extends JpaRepository { … } 이러한 JpaRepository 상속 방식의 장점은 바로 메서드 쿼리 방식으로, Entity 필드를 findBy{Field_1}And{Field_2} 와 같이 작성하면 WHERE field_1 = {Field_1} AND {Field_2} 같은 방식으로 쿼리 조건을 만들어준다는 장점이 있습니다. 해당 방식의 주의할 점은, 메서드 쿼리가 만들어지기 위해서는 Entity의 필드를 참조하기 때문에, 반드시 Entity의 필드명 혹은 쿼리 관련 키워드가 와야 한다는 점입니다. 문제는 해당 JpaRe..
QueryDSL 의존성 추가를 위해서는 다음 두 가지 의존성을 추가해야 합니다.implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jakarta") 문득, 개발을 하다가 궁금한 점이 생겼는데, querydsl-jpa 의존성 하나로 해결할 수 없을까? 라는 생각으로 이번 글을 작성하게 되었습니다. 우선 querydsl 저장소를 살펴보면, 다음과 같이 다양한 의존성을 제공하고 있습니다. 그 중에서 우리가 사용하는 querydsl-jpa와 querydsl-apt도 볼 수 있습니다. 그리고, 우리가 사용하는 querydsl-jpa의 의존성을 보면 다음과 같이 query..
Transaction이란?Spring을 사용하다 보면 자연스럽게 MVC 구조를 접하게 되고, 이 과정에서 데이터 저장소(Model)에 접근하기 위해 JDBC, JPA, Hibernate 등의 기술을 활용하게 됩니다.이러한 기술들을 사용하여 데이터 저장소에 요청할 쿼리를 만들고 실행하기 전까지의 과정을 하나의 작업 단위라고 하는데, 이를 한 단어로 트랜잭션이라고 부릅니다.트랜잭션은 작업 단위 안에서 발생하는 조회, 생성, 수정, 삭제 등의 여러 작업을 하나로 묶어 처리하는데요,예를 들어, 주문이라는 작업은 다음과 같은 단계를 포함하며, 이를 하나의 트랜잭션으로 처리합니다:사용자의 주문 요청상품 재고 감소주문 정보 저장사용자에게 주문 요청 완료 알림 발송이처럼 주문 작업은 여러 단계를 포함하는 하나의 트랜잭..
JPA 테스트를 위한 의존성 구성dependencies { implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2") implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.jetbrains.kotlin:kotlin-reflect") runtimeOnly("com.mysql:mysql-connector-j") // test container를 위한 의존성 라이브러리 testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementat..
JPA는 Hibernate의 구현체 중 하나로, Interface 타입으로 사용하기 때문에 내구 구현에 대해 잘 모르고 사용하는 경우가 많습니다. 오늘은 우리가 사용하고 있는 findAll() 메서드는 내부적으로 어떻게 호출될지 이번 포스팅을 통해 알아보려고 합니다. JpaRepositoryJpaRepository는 Interface 타입으로 선언되었기 때문에 아래 코드와 같이 내부 구현을 알 수 없습니다. 그렇기 때문에 Spring Context가 띄워질 때, JpaRepository가 어떤 구현체를 사용하는지 알아보겠습니다.@NoRepositoryBeanpublic interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepo..
iron_jin
'Spring Framework/Data' 카테고리의 글 목록