객체지향 쿼리 언어2 - 중급 문법
·
Study/Spring
경로 표현식경로 표현식: .(점)을 찍어 객체 그래프를 탐색하는 것select m.username(상태필드) from Member m join m.team t(단일값 연관필드) join m.orders o(컬렉션 값 연관필드)where t.name = '팀'경로 표현식 세가지 필드상태 필드 : 단순히 값을 저장하기 위한 필드(참조의 끝값) , 경로탐색의 끝을 의미한며 단순 값이기 때문에 더이상 탐색이 불가하다단일값 연관필드 : @ManyToOne, @OneToOne, 대상이 엔티티컬렉션 값 연관필드 : @OneToMany, @ManyToMany : 대상이 컬렉션연관필드 : 연관관계를 위한 필드(참조를 이어가는 부분)상태 필드String query = "select m.username..
객체지향 쿼리 언어1 - 기본 문법
·
Study/Spring
JPQL테이블 대상이 아닌 엔티티 객체를 대상으로 쿼리한다. 따라서 SQL을 추상화하여 특정 데이터베이스 SQL에 의존하지 않는다.문법select m from **Member** as m where **m.age** > 18엔티티는 대소문자 구분 O, 키워드 구분 X테이블 이름이 아닌 엔티티 이름 사용별칭 필수!일반적으로 SQL 문법과 비슷함TypeQuery, Query반환 타입이 명확할 경우 , TypeQuery반환 타입이 불명확 할경우 , Query결과 조회 api try { Member member = new Member(); member.setUsername("member1"); member.setAge(10); em..
값 타입
·
Study/Spring
값 타입 분류기본 값 타입자바 기본 타입 (int, double)래퍼 클래스 (Integer , Long)String임베디드 타입 (복합 값 타입)컬랙션 값 타입참고기본 값 타입은 공유되지 않는다. (값만 복사할 뿐, 참조해서 가져오지 않는다. / c언어의 *p를 이용한 값 변경을 생각해보자)래퍼클래스는 공유 가능한 객체지만 변경할 수 없다. (setter 또는 새로운 객체 생성 등을 이용하여 변경할 수 있지 “=”을 통해 자체적으로 변경할 수는 없다)클래스 객체 참조 값을 변경 시키키 때문에 변경된 값이 공유될 수 있다.임베디드 타입embedded - '내부에 탑재된' 의미를 가지고 있다. 여러 속성등이 나열되어 있는 엔티티를 embedded type 객체로 모아서 관리할 수 있다.사용법@Embedda..
프록시
·
Study/Spring
프록시 기초프록시 : 실제 클래스를 상속 받아서 만들어진다. 이 때 해당 객체를 참조를 보관할 뿐이다.em.find() vs em.getReference()em.find() : 데이터베이스를 통해 실제 엔티티 객체를 조회하는 것.em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 객체 조회DB에는 쿼리가 나가지 않지만 객체는 조회가 된다.실제로 사용될 경우에만 select문으로 조회된다.먼저 진짜 엔티티를 참조하는 Proxy 객체가 생성된다. 이후 영속성 컨텍스트에게 초기화 요청을 하면 DB에서 조회후 해당 Entity를 사용할 수 있게 되는 것이다.(Proxy가 진짜 엔티티가 되는 것이 아니라 DB에서 조회해온다는 것을 알아두자, 초기화는 처음 객체를 사용할 때 한번만 동작한다..
다양한 연관관계 매핑
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런연관관계 매핑시 고려사항 3가지다중성단방향 , 양방향연관관계의 주인 다중성다대일 : @ManyToOne일대다 : @OneToMany일대일 : @OneToOne다대다 : @ManyToMany단방향, 양방향테이블외래키 하나로 양쪽으로 조인할 수 있다. 따라서 사실 테이블은 방향이라는 개념이 없다고 볼 수 있다.객체참조용 필드가 있는 쪽으로만 참조가 가능하다. 따라서 방향이 존재하며, 한쪽만 참조하면 단방향 , 양쪽이 서로 참조하면 양방향이다.(서로가 단방향 관계를 맺고있다.)연관관계의 주인테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 하지만 객체의 양방향 관계는 서로가 단방향 관계를 맺고 있기 때문에 (A→B , B→A) 참조가 2군..
연관관계의 이해
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런목표객체와 테이블의 연관관계를 이해한다.객체의 참조와 테이블의 외래키를 매핑한다.용어 이해방향 : 단방향, 양방향다중성 : 다대일(N:1) , 일대다(1:N) , 일대일(1:1), 다대다(N:M) 이해연관관계의 주인 : 객체 양방향 연관관계 관리가 필요.연관관계가 필요한 이유‘객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다’ - 조영호(객체지향의 사실과 오해)객체 하나, 테이블 하나로는 시스템을 만들 수 없다, 연관관계를 활용해야한다.단방향 연관관계객체를 테이블에 맞춘 모델링Member @Entity @Getter public class Member { @Id @GeneratedValue(stra..
엔티티 매핑
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런객체와 테이블 매핑@Entity@Entity가 붙은 클래스는 JPA가 관리, 엔티티라고 한다.JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수다.주의기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)final 클래스 , enum , interface, inner 클래스 사용이 불가능함.저장할 필드에 final 사용이 불가능함.@Table엔티티와 매핑할 테이블을 지정한다.데이터베이스 스키마 자동 생성DDL을 애플리케이션 실행 시점에서 자동 생성한다.테이블 중심 → 객체 중심데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성한다.이렇게 생성된 DDL은 개발 장비에서만 활용한다.생성된..
영속성 컨텍스트
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런영속성 컨텍스트JPA를 이해하는데 가장 중요한 용어, 논리적인 개념이다. (눈에 보이지 않는다)엔티티를 영구 저장하는 환경.EntityManager를 통해 영속성 컨텍스트에 접근한다EntityManager와 영속성 컨텍스트가 1:1 매핑을 한다.EntityManager.persist(entity)persist = 영속(지속하다)엔티티를 DB가 아니라 “영속성 컨텍스트”에 저장한다는 의미.엔티티의 생명주기비영속 (new/transient)transient - 과도 현상 : 정상 상태가 될 때까지의 사이에 생기는 현상.영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속 (managed)em.persist(member); 이때 바로 데이터 베이스..
JPA 기본
·
Study/Spring
강의 링크자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런sql 중심 개발의 문제점.무한 반복, 지루한 코드객체의 CRUD에 대한 지속적으로 해야함java → sql , java ← sql악덕 기획자가.. 엔티티 필드를 추가, 삭제해달라고 하면 쿼리문 전체를 수정해야한다.객체와 관계형 데이터베이스의 차이개발자는 == sql mapper개발자는 데이터베이스에서 데이터를 조회 후 스프링 서버에서 객체로 바꾸고 , 클라이언트는 그 객체를 조회한다.따라서 개발자는 객체와 RDB 사이 중간에 mapper 역할을 한다 → 객체와 RDB가 어떤 차이가 있는지 알아야 둘을 연결을 하든 말든 할 것이다.차이상속연관관계데이터 타입 및 식별 방법1. 상속객체 상속 관계부모 클래스의 속성과 메서드를 자식 클래스가 이어..