[JPA] 데이터베이스 스키마 자동 생성하는 방법 애플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성 클래스의 매핑 정보와 데이터베이스 방언을 사용하여 데이터베이스 스키마 생성 ↓ 방언(Dialect) 더보기 방언 (Dialect) : 표준 SQL인 ANSI SQL 이외에 각 DBMS 벤더(Oracle, MySQL, ・・・)에서 자신만의 기능을 추가한 SQL JPA는 직접 SQL을 작성하고 실행 벤더에 맞는 쿼리를 생성하고 알맞는 구현체를 제공 방법 application.properties에 속성 추가 spring.jpa.hibernate.ddl-auto=update TIL/JPA 3년 전
[JPA] annotation 종류 Annotation 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종 종류 역할 @Entity 해당 클래스가 데이터베이스의 테이블과 1:1 매핑 • 도메인을 식별하는데 사용 • JPA가 관리 • 기본 생성자 필수 • final 클래스, enum, interface, 내부 클래스에서 사용 불가 • 속성 - name(String) - default : 클래스의 이름 → JPA에서 사용할 엔티티 이름 @Table 엔티티와 매핑할 테이블 지정 • 도메인 개체가 참조하는 테이블에 사용 • 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용 • 속성 - name(String) - default : 엔티티의 이름 → 매핑할 테이블 이름 • 속성 - catalog(String) - default : 데이터베.. TIL/JPA 3년 전
[JPA] N+1 문제 N+1 문제 FetchType.EAGER를 필요한 곳에서 Lazy Loading으로 쿼리가 실행될 때 발생하는 문제 ↓ Lazy Loading vs Eager Loading 더보기 Lazy Loading (지연된 로딩) : 필요 시점까지 객체의 초기화를 연기시키기 위해 컴퓨터 프로그래밍에 흔히 사용되는 디자인 패턴 페이지를 불러올 때 당장 필요하지 않은 리소스들을 나중에 로딩 (사용자가 보지 않는 것들은 나중에 로딩) Lazy Loading으로 설정되어 있는 엔티티는 프록시 객체로 불러와짐 사용자가 필요로 하는 시점에 로딩 콘텐츠의 제공 속도가 빠름 (예시) 무한 스크롤 사용 시 - 사용자의 스크롤 깊이를 계산하다가 페이지 끝에 도달했을 때 데이터를 요청 Eager Loading (즉시 로딩) : 조인을.. TIL/JPA 3년 전
[JPA] Querydsl 설정 Querydsl SQL, JPQL을 코드로 작성할 수 있게 해주는 빌더 API 컴파일 시점에 문법 오류 발견할 수 있음 동적 쿼리 편리하고 실용적 사용법 1. 의존성 추가 build.gradle buildscript { ext { querydslVer = '4.4.0' querydslPluginVer = '1.0.10' } dependencies { classpath "gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:${querydslPluginVer}" } } plugins { id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } apply plugin: 'com.ewerk.gradle.plugins.q.. TIL/JPA 3년 전
[JPA] JPA란? JPA (Java Persistence API) 자바를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API EJB(Enterprise Java Bean)에서 제공하는 엔터티 빈(Entity Bean)을 대체하는 기술 EJB 컨테이너에 의존하지 않음 구성 javax.persistance 패키지로 정의 된 API 그 자체 JPQL (Java persistance Query Language) 객체/관계 메타데이터 관련 기술 EJB (Enterprise Java Beans) JPA의 정의를 포함하고 있음 EJB 컨테이너 or 자바 EE 응용프로그램 서버가 필요함 Java Data Object API Service Data Object API Hibernate 자바 언어를 위한 객체 관계 .. TIL/JPA 3년 전