분류 전체보기 1341

Ch01. 프로젝트 환경 설정 - H2 데이터베이스 설치, 스프링 부트 설정(JPA, DB)

H2 DataBase 설치 https://www.h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size Supp www.h2database.com 다운로드 및 설치 h2 데이터베이스 버전은 스프링 부트 버전에 맞춘다. 데이터베이스 파일 생성 ..

실전! Querydsl 2021.12.29

Ch01. 프로젝트 환경 설정 - 라이브러리 살펴보기

Querydsl 라이브러리 살펴보기 querydsl-apt: Querydsl 관련 코드 생성 기능 제공 querydsl-jpa: querydsl 라이브러리 스프링 부트 라이브러리 살펴보기 spring-boot-starter-web spring-boot-starter-tomcat: 톰캣 (웹서버) spring-webmvc: 스프링 웹 MVC spring-boot-starter-data-jpa spring-boot-starter-aop spring-boot-starter-jdbc HikariCP 커넥션 풀 (부트 2.0 기본) hibernate + JPA: 하이버네이트 + JPA spring-data-jpa: 스프링 데이터 JPA spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + ..

실전! Querydsl 2021.12.29

Ch01. 프로젝트 환경 설정 - Querydsl 설정과 검증

Builder.Gradle 설정(QueryDsl 파일 생성) plugins { id 'org.springframework.boot' version '2.6.2' id 'io.spring.dependency-management' version '1.0.11.RELEASE' //querydsl plugin 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { maven..

실전! Querydsl 2021.12.29

Ch06. 나머지 기능들 - 네이티브 쿼리

가급적 네이티브 쿼리는 사용하지 않는 게 좋음, 정말 어쩔 수 없을 때 사용 최근에 나온 궁극의 방법 스프링 데이터 Projections 활용 스프링 데이터 JPA 기반 네이티브 쿼리 페이징 지원 반환 타입 Object[] Tuple DTO(스프링 데이터 인터페이스 Projections 지원) 제약 Sort 파라미터를 통한 정렬이 정상 동작하지 않을 수 있음(믿지 말고 직접 처리) JPQL처럼 애플리케이션 로딩 시점에 문법 확인 불가 동적 쿼리 불가 네이티브 쿼리 동작 JPQL은 위치 기반 파리 미터를 1부터 시작하지만 네이티브 SQL은 0부터 시작 네이티브 SQL을 엔티티가 아닌 DTO로 변환은 하려면 DTO 대신 JPA TUPLE 조회 DTO 대신 MAP 조회 @SqlResultSetMapping(복..

Ch06. 나머지 기능들 - Query By Example

JPARepository를 Extends 받으면 사용이 가능하다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example Spring Data JPA - Reference Documentation Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.act..

Ch06. 나머지 기능들 - Specifications (명세)

스프링 데이터 JPA는 JPA Criteria를 활용해서 이 개념을 사용할 수 있도록 지원 술어(predicate) 참 또는 거짓으로 평가 AND OR 같은 연산자로 조합해서 다양한 검색조건을 쉽게 생성(컴포지트 패턴) 예) 검색 조건 하나하나 스프링 데이터 JPA는 org.springframework.data.jpa.domain.Specification 클래스로 정의 명세 기능 사용 방법 JpaSpecificationExecutor 인터페이스 상속 //JpaSpecificationExecutor extends public interface MemberRepository extends JpaRepository,MemberRepositoryCustom,JpaSpecificationExecutor { Spe..

Ch05. 스프링 데이터 JPA 분석 - 새로운 엔티티를 구별하는 방법

새로운 엔티티를 판단하는 기본 전략 식별자가 객체일 때 null로 판단 식별자가 자바 기본 타입일 때 0으로 판단 Persistable 인터페이스를 구현해서 판단 로직 변경 가능 만약 PK를 채번해서 넣는 거라면 Save 메서드에서 PK가 있기 때문에 값이 있다고 생각하여 Merge 호출 Merge에서 DB에 값이 있는지를 확인(select쿼리) 없으므로 insert를 실행한다. 비효율적이다. 직접 Persitable의 isNew 메서드를 구현 implement Persistable를 구현하여 isNew 정책을 재정의 한다. 현업에서는 createDate를 비교하여 많이 사용한다. 참고 JPA 식별자 생성 전략이 @GenerateValue 면 save() 호출 시점에 식별자가 없으므로 새로운 엔티티로 인..

Ch05. 스프링 데이터 JPA 분석 - SpringDataJPA 구현체 분석

SimpleJpaRepository : JPA 구현체 Jpa의 내부 기능을 활용해서 CRUD 기능을 제공한다. Count와 같은 쿼리는 JPA에서 제공하는 것이 아니기 때문에 StringQuery를 가지고 있다. @Repository : 스프링 컴포넌트로 등록, JPA Exception을 SpringFramework에서 제공하는 Exception으로 변경한다 @Transactional : 기본적으로 스프링 데이터 JPA는 트렌젝션을 걸고 시작한다. 트랜잭션을 SpringDataJpa가 제공해 주기떄문에 내 코드에 @Transactional이 없어도 동작한다. JPA의 모든 변경은 트랜잭션 안에서 동작 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리 서비스 계층에서 트랜잭션을 시작..