반응형

전체 글 104

객체지향 쿼리 언어1 - 기본 문법

JPA는 다양한 쿼리 방법을 지원한다.- JPQL- JPA Criteria- QueryDSL- 네이티브 SQL- JDBC API 직접 사용, MyBatis, SpringJdbcTemplate JPQL- 가장 단순한 조회 방법이다.  - EntityManager.find()  - 객체 그래프 탐색(a.getB().getC()) 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면 어떻게 해야 할까?JPA를 사용하면 엔티티 객체를 중심으로 개발하게 되는데 문제는 검색 쿼리이다.검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다.모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 하다.애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. JPQL..

공부/JPA 2024.12.30

값 타입

JPA는 데이터 타입을 최상위 레벨로 분류하면 2가지로 분류한다. 1. 엔티티 타입  - @Entity로 정의하는 객체  - 데이터가 변해도 식별자로 지속해서 추적 가능 ex) 회원의 키나 값을 변경해도 식별자로 인식 가능2. 값 타입  - int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체  - 식별자가 없고, 값만 있으므로 변경시 추적 불가  - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체  값 타입은 또 세가지로 분류될 수 있다.1. 기본값 타입2. 임베디드 타입3. 컬렉션 값 타입 값 타입1. 기본값 타입  - 자바 기본 타입(int, double)  - 래퍼 클래스(Integer, Long)  - String 기본 값 타입은 String ..

공부/JPA 2024.12.23

프록시와 연관관계 정리

프록시프록시는 왜 사용할까? 아래의 그림을 보자.Member를 조회할때 Team도 함께 조회가 필수인가?아래의 코드를 보자.Member member = em.find(Member.class, 1L);printMemberAndTeam(member);private static void printMemberAndTeam(Member member) { String name = member.getName(); System.out.println("name = " + name); Team team = member.getTeam(); System.out.println("team = " + team);} em.find하여 쿼리가 나갈때 team과 member 쿼리가 두 방이 나가서 한번에 찾을 수 ..

공부/JPA 2024.12.21

JPA 고급 매핑

상속 관계 매핑- 관계형 데이터베이스는 상속관계가 없다.- 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.- 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 다음과 같다.(DB의 전략)     1. 조인 전략- 장점  - 테이블 정규화  - 외래 키 참조 무결성 제약조건 활용가능  - 저장공간 효율과- 단점  - 조회시 조인을 많이 사용, 성능 저하  - 조회 쿼리가 복잡함  - 데이터 저장시 INSERT SQL 2번 호출package hellojpa.prac1;import jakarta.persistence.*;@Entity@Inheritance(strategy = InheritanceType..

공부/JPA 2024.12.08

다양한 연관관계 매핑

연관관계 매핑시 고려사항 3가지- 다중성    - 다대일 : @ManyToOne    - 일대다 : @OneToMany    - 일대일 : @OneToOne    - 다대다 : @ManyToMany- 단방향, 양방향    - 테이블(단방향) : 외래 키 하나로 양쪽 조인이 가능하다 즉 방향이라는 개념 자체가 없다.    - 객체(양방향) : 객체는 참조용 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향이고, 양쪽이 참조하면                                 양방향이다.- 연관관계의 주인    - 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다.    - 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데이다.    - 객체 양방향 관계는 참조가 2군데 있..

공부/JPA 2024.12.03

연관관계 매핑 기초

https://surrealcode.tistory.com/103 엔티티 매핑엔티티 매핑엔 다음과 같은 어노테이션이 사용된다.객체와 테이블 매핑 : @Entity, @Table필드와 컬럼 매핑 : @Column기본 키 매핑 : @Id연관관계 매핑 : @ManyToOne, @JoinColumn  객체와 테이블 매핑@Entity- @Ensurrealcode.tistory.com앞서서 왜 테이블 설계와 개발 후 왜 연관관계가 필요한지에 알아봤다.참고하도록 하자. 목표- 객체와 테이블 연관관계의 차이를 이해- 객체의 참조와 테이블의 외래 키를 매핑- 용어 이해  - 방향(Direction) : 단방향, 양방향  - 다중성(Multiplicity) : 다대일, 일대다, 일대일, 다대다 이해  - 연관관계 주인(Ow..

공부/JPA 2024.12.02

엔티티 매핑

엔티티 매핑엔 다음과 같은 어노테이션이 사용된다.객체와 테이블 매핑 : @Entity, @Table필드와 컬럼 매핑 : @Column기본 키 매핑 : @Id연관관계 매핑 : @ManyToOne, @JoinColumn  객체와 테이블 매핑@Entity- @Entity가 붙은 클래스는 JPA가 관리하고, 엔티티라 한다.- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다.- 주의  - 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)  - final 클래스, enum, interface, inner 클래스는 사용할 수 없다.  - 저장할 필드에 final은 사용할 수 없다.속성 : name  - JPA에서 사용할 엔티티 이름을 지정한다.  - 기본값 : 클래스 ..

공부/JPA 2024.11.30

JPA 영속성 관리

JPA에서 가장 중요한 2가지1. 객체와 관계형 데이터베이스 매핑하기(ORM : Object Relational Mapping)2. 영속성 컨텍스트 JPA 내부 구조JPA의 내부 구조를 이해하기 위해서는 영속성 컨텍스트에 대해 이해해야 한다.https://surrealcode.tistory.com/101 JPA 설정하기기본 세팅은 아래 블로거가 정말 잘 요약해놓은 것이 있다. 이걸 참고하자https://velog.io/@chosj1526/JPA-Hello-JPA-프로젝트-생성 [JPA] Hello JPA 프로젝트 생성이 강의는 인프런 김영한님의'자바 ORM 표준 JPsurrealcode.tistory.com이전에 확인하였듯이 웹 어플리케이션은 persistence를 통해 emf를 한개 생성후 요청이 올때..

공부/JPA 2024.11.28

JPA 설정하기

기본 세팅은 아래 블로거가 정말 잘 요약해놓은 것이 있다. 이걸 참고하자https://velog.io/@chosj1526/JPA-Hello-JPA-프로젝트-생성 [JPA] Hello JPA 프로젝트 생성이 강의는 인프런 김영한님의'자바 ORM 표준 JPA 프로그래밍 - 기본편'을 보며 공부하고 작성한 게시글임을 밝힙니다. 강의 내용 외에도 공부한 내용과 본인생각이 함께 있습니다 💻 하이버네이velog.io   JPA 구동 방식JPA는 Persistence라는 클래스가 있다. 이 Persistence가 resources/META-INF/persistence.xml 설정 정보를 읽어서 EntityManagerFactory를 만들고 EntityManger를 찍어내서 돌린다. Member를 만든다고 가정하자...

공부/JPA 2024.11.26

JPA란?

애플리케이션은 객체 지향 언어로 개발한다.데이터 베이서는 관계형 DB를 주로 사용한다. 지금 시대는 객체를 관계형 DB에 보관하고 관리하는 시대이다.그런데 이 객체를 관계형 DB에 보관하려면 SQL을 엄청나게 사용해야 한다.이 문제가 SQL 중심 개발의 문제점이다. 관계형 데이터베이스는 기본적으로 상속 관계가 없다.관계형 데이터베이스에서는 슈퍼타입, 서브타입의 관계를 통해 상속 관계를 풀어낸다.하지만 여기서 내가 Album을 테이블에 저장하고 싶다고 하면, ALBUM 테이블과 ITEM 테이블에insert into iteminsert into album을 하여 두번 insert를 해주어야 한다.객체가 더 복잡해지고 각각의 객체가 점점 많아진다면, 쿼리가 정말 복잡해 질 것이다.  JPA(Java Persi..

공부/JPA 2024.11.25
반응형