Spring/Spring Data JPA5 Q클래스 정의- QueryDSL이 Entity 클래스를 기반으로 자동 생성하는 클래스로 Entity 클래스의 메타 데이터를 가지고 있는 클래스 특징- Q+[엔티티명] 형식으로 자동 생성됨 (generated 폴더)- 엔티티의 각 필드는 Q클래스에서 QueryDSL 타입 필드로 변환- 컴파일 단계에서 생성 → 런타임 시점에 에러를 발견하는 보통의 경우와 다르게 컴파일 단계에서 에러 발견 가능- 필드명(컬럼명)을 직접 기억하지 않고 쿼리 작성을 보다 편리하게 할 수 있음- 엔티티를 직접 사용하는 것이 아니라 QueryDSL이 엔티티 클래스 정보 활용을 위해 QClass를 만들어 사용 → 타입 안전한 쿼리작성 가능 (타입 안정성 보장)※ 일반적으로 .gitignore로 관리 제외 예시엔티티@Entitypublic .. 2025. 7. 12. JPA 정의 JPA(Java Persistence API)- 자바 진영의 ORM 기술 표준 (자바에서 RDB를 사용하는 방식을 정의한 인터페이스)- ORM(Object Relational Mapping) = 객체와 RDB의 데이터를 자동으로 매핑(연결)해주는 것=> 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것- 자바 환경에서 반복적인 SQL CRUD 처리에 용이함- Repository 인터페이스 개발 후 구현체 선언 시 인터페이스명+[Impl]로 구현체명을 정의해야 Spring Data JPA가 인식- JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리※ Persistence(영속성) = 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성 테이블 매핑 .. 2024. 4. 8. JPQL(Java Persistence Query Language) 정의 - 객체 지향 DB의 엔티티에 대한 쿼리를 정의하기 위한 객체 지향 쿼리 언어로 JPA의 일부분 중 하나 - DB의 테이블(Table)이 아닌 Spring에서 정의한 엔티티(Entity)를 기준으로 함 테이블과 엔티티의 차이 - 테이블 = DB 혹은 SQL 상에 실제로 존재하며 행과 열의 물리적인 구조를 가지고 있음 - 엔티티 = DB나 SQL 상에 실제로 존재하지 않고 OOP에서 개체를 나타내는 추상적인 개념이며 Java와 같은 객체 지향 언어에서 필드와 메소드를 포함하는 클래스로 정의됨 주의 사항 1. 쿼리문에 *를 사용할 수 없음 2. 오류는 발생하지 않지만 엔티티명의 첫 글자는 대문자로 입력하는 것이 일반적인 관례 3. @Entity(name=)을 통해 엔티티명을 별도로 지정하지 않는 경우 .. 2024. 4. 5. spring.jpa.hibernate.ddl-auto ddl-auto 속성 - DB 스키마 생성 및 갱신과 관련된 설정 - 개발자가 어플리케이션을 실행할 때 JPA가 데이터베이스 스키마를 자동으로 생성, 갱신 또는 유지하도록 할지를 결정함 spring.jpa.hibernate.ddl-auto=update create - 애플리케이션을 실행할 때마다 DB 스키마를 새로 생성 - 만약 DB에 테이블이 있는 상태라면 기존 테이블을 모두 삭제하고 새로 생성함 create-drop - create와 같이 애플리케이션을 실행할 때마다 DB 스키마를 새로 생성하지만 애플리케이션이 종료되면 스키마를 다시 삭제함 - 주로 테스트 환경에서 사용하며, 애플리케이션의 실행 사이에 스키마를 생성하는 것이 효율적일 때 유용 update - 현재 DB 스키마를 기준으로 JPA 엔티티.. 2024. 3. 19. @AllArgsConstructor 지양 이유 및 대책 @AllArgsConstructor의 문제점 - @AllArgsConstructor는 모든 필드를 파라미터로 받아 객체를 생성하기 때문에 일부 필드만 사용하는 경우에 불필요한 의존성을 발생 시킬 수 있음 - @AllArgsConstructor는 정의한 모든 필드를 가진 생성자를 생성해주는데 다음과 같이 같은 타입의 파라미터를 서로 바꿔 입력하였을 경우에도 에러가 발생하지 않는 문제가 발생함 @AllArgsConstructor public class carDto { private String carId; private int carNum; private String carUser; } // new carDto("Tom", 4123, "n1309afc2") 대책 (@Builder) - 원하는 필드를 설정할 .. 2024. 2. 26. 이전 1 다음