객체 지향 쿼리 언어 소개 - JPQL - JPA Criteria - QueryDSL - 네이티브 SQL - JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 과 함께 사용 JPQL 소개 - 가장 단순한 조회 방법 - EntityManager.find() - 객체 그래프 탐색 (a.getB().getC()) - 나이가 18살 이상인 회원을 모두 검색하고 싶다면 ? JPQL - JPA를 사용하면 엔티티 객체를 중심으로 개발 - 문제는 검색 개발 - 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 - 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 - 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 - JPA는 SQL을..
기본값 타입 JPA의 데이터 타입 분류 - 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 지속해서 추적 가능 - 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 - 값 타입 - int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 - 식별자가 없고 값만 있으므로 변경시 추적 불가 - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 - 기본값 타입 - 자바 기본 타입 (int, double) - 래퍼 클래스 (Integer, Long) - String - 임베디드 타입 (embedded type, 복합 값 타입) - 컬렉션 값 타입 (collection value type) 기본값 타입 - 예) String ..
객체와 테이블 매핑 @Entity - @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 - 기본 생성자 필수 (파라미터가 없는 public 또는 protected) - final 클래스 , enum, interface, inner 클래스 사용 X - 저장할 필드에 final 사용 X @Entity 속성 name - JPA에서 사용할 엔티티 이름 지정 - default -> 클래스 이름 - 같은 클래스 이름이 없다면, 가급적 기본값을 사용한다. @Table 속성 - catalog : 데이터베이스 catalog 매핑 - schema : 데이터베이스 schema 매핑 - uniqueConstraints (DDL) : DDL 생성 시..
JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 2. 영속성 컨텍스트 영속성 컨텍스트 - JPA를 이해하는데 가장 중요한 언어 - "엔티티를 영구 저장하는 환경" 이라는 뜻 - EntityManager.persist(entity); 엔티티 매니저 ? 영속성 컨텍스트 ? - 영속성 컨텍스트는 논리적인 개념 - 눈에 보이지 않는다. - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 - 비영속 (new/ transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 - 영속 (managed) 영속성 컨텍스트에 관리되는 상태 - 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 - 삭제 (removed) 삭제된 상태 영속성 컨텍스트의 이점 - 1..
SQL 중심 개발의 문제점 - 객체를 관계형 DB에 관리 - SQL 중심적인 개발 - CRUD 의 무한 반복, 지루한 코드 - 패러다임의 불일치 : 객체 vs 관계형 데이터베이스 - 객체를 관계형 데이터베이스에 저장. 객체 -> SQL 변환 -> RDB(SQL) - 객체와 관계형 데이터베이스의 차이 1. 상속 2. 연관관계 3. 데이터 타입 4. 데이터 식별 방법 1. 객체의 경우 상속이 존재하지만 Table의 경우 상속이 존재하지 않고 비슷한 슈퍼타입 서브타입 관계가 존재한다. -> 자바 컬렉션을 예시로 설명 2. 객체는 참조를 사용, 테이블은 외래 키를 사용 -> 객체는 자유롭게 객체 그래프를 탐색할 수 있어야 한다. 결국 객체를 객체답게 모델링 할 수록 매핑 작업만 늘어난다. 객체를 자바 컬렉션에 ..
연관관계 매핑시 고려사항 3가지 1. 다중성 2. 단방향, 양방향 3. 연관관계의 주인 1. 다중성 - 다대일 : @ManyToOne - 일대다 : @OneToMany - 일대일 : @OneToOne - 다대다 : @ManyToMany 2. 단방향, 양방향 - 테이블 - 외래키 하나로 양쪽 조인 가능 - 사실 방향이라는 개념이 없다. - 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 - 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 - 객체 양방향 관계는 A -> B , B -> A 처럼 참조가 2군데 - 객체 양방향 관계는 참조가 2군데 있다. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야 한다. - 연관관계의 ..
- 연관관계가 필요한 이유 - 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. - 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. - 객체는 참조를 사용해서 연관된 객체를 찾는다. - 테이블과 객체 사이에는 이런 큰 간격이 있다. - 객체 지향 모델링 / 단방향 연관관계 // Member.class @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... //조회 Member findMember = em.find(Member.class, member.getId()); //참조를 사용해서 연관관계 조회 Team findTeam = findMember.getTeam(); //팀 저장 Team team = n..
프록시 프록시 기초 - em.find() vs em.getReference() - em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 - em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시 특징 - 실제 클래스를 상속 받아서 만들어진다. - 실제 클래스와 겉 모양이 같다. - 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. (이론상으로) - 프록시 객체는 실제 객체의 참조(target)을 보관한다. - 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. - 프록시 객체는 처음 사용할 때 한 번만 초기화 - 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님. 초기화 ..
- Total
- Today
- Yesterday
- 김영한 JPA
- http
- 이펙티브자바 아이템60
- js api
- 킹수빈닷컴
- REST API
- js array
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- GCP
- HTTP 완벽 가이드
- java
- 김영한 http
- HTTP 완벽가이드
- JS 딥다이브
- 프로그래머스 SQL
- 이펙티브자바 아이템59
- 이펙티브자바 스터디
- 프로그래머스
- 이펙티브자바
- 백기선 스터디
- ㅇㄷㅇㅈ
- dreamcoding
- 백준
- 드림코딩
- JPA 연관관계 매핑
- 모던자바스크립트
- 패스트캠퍼스 컴퓨터공학 완주반
- Spring Security
- js promise
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |