728x90
반응형

Java 79

[JPA] 객체 지향 쿼리 언어 - 3

깃허브 바로가기 책의 내용이 너무많아 계속 분리해서 작성하게 된다. 이번 포스팅에서는 서브 쿼리부터 내용을 다뤄보도록 하겠다. 서브 쿼리 JPQL도 SQL처럼 서브 쿼리를 지원하는데, 여기서는 몇 가지 제약사항이 있다. 서브 쿼리를 WHERE, Having 절에서만 사용할 수 있고 select, from 절에서는 사용할 수 없다. 서브쿼리 함수 [NOT] EXISTS 서브쿼리 서브쿼리에 결과가 존재하면 참. NOT은 반대 {ALL | ANY | SOME} 서브쿼리 비교 연산자와 같이 사용한다. ALL: 조건을 모두 만족하면 참 ANY or SOME : 둘은 같은 의미이다. 조건을 하나라도 만족하면 참 [NOT] IN 서브쿼리 서브쿼리의 결과 중 하나라도 같은 것이 있으면 참. 참고로 IN은 서브쿼리가 아..

JPA 2022.08.05

[JPA] 객체 지향 쿼리 언어 - 2

JPQL 다시한번 JPQL의 특징을 정리해보자 JPQL은 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 DB SQL에 의존하지 않는다. JPQL은 결국 SQL로 변환된다. 기본 문법과 쿼리 API JPQL도 SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용할 수 있다. em.persist()로 엔티티를 저장하므로 INSERT 쿼리는 없다. JPQL 문법 select_문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절] update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [whe..

JPA 2022.08.05

[JPA] 객체지향 쿼리 언어 - 1

JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리기술을 지원한다. JPQL은 가장 중요한 객체지향 쿼리 언어이다. 다른 Criteria나 QueryDSL은 JPQL을 편리하게 사용하도록 도와주는 기술이므로 JPA를 다루는 개발자라면 JPQL을 필수로 학습해야 된다. 객체지향 쿼리 소개 EntityManager.find() 메소드를 사용하면 식별자로 엔티티 하나를 조회할 수 있다. 검색 방법은 두가지다. 식별자 조회 : EntityManager.find(); 객체 그래프 탐색 : a.getB().getC(); 이런 단순한 SELECT 쿼리들로는 개발을 하지 않는다. 복잡 쿼리나 통계형 쿼리같은 복잡한 쿼리들을 수행할 때에는 이런 쿼리로는 택도 없다. ORM을 사용하면 DB테이..

JPA 2022.08.05

Effective Java 1장

이펙티브 자바를 읽으면서 내 기술을 확장하고 싶었다. 그래서 부족한 부분은 채우고 앞으로의 개발에 적용해보려고 한다. 1. 객체의 생성과 파괴 생성자 대신 정적 팩토리 메서드를 고려하라 클래스는 클라이언트에 public 생성자 대신 정적 팩토리 메서드를 제공할 수 있다. 정적 팩토리 메소드가 생성자보다 좋은 장점 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 펙토리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. 단점 상속을 하려면 public이나 protected 생성자가 필요하니 정적 팩토리 메서드만 제공하면 하위..

Java 2022.08.05

TDD Clean Code with Java 12기 - 1주차

넥스트스텝에서 주최한 TDD, 클린코드 with Java 12기를 신청하게 되었다. 개인적으로 테스트 주도로 개발하는 것을 너무 지향했고 혼자 공부하면서 지식을 습득했었는데 이런 좋은 강의를 통해서 기존에 스터디원들과도 같이 성장할 수 있는 계기가 또 한가지가 생기게 되었다.😄 넥스트스텝은 개발자가 소프트웨어 장인으로 성장하는데에 필요한 모든 도움을 주는 것이 비전이자 목표라고 한다. 자동차 경주의 후기는 단위 테스트 코드 작성에 대한 것보다 더 나아가서 TDD를 하려고 무조건 조금씩이라도 테스트를 해가면서 기능을 구현하는 것을 습관화 하면 저절로 뒤로 클린코드가 따라오는 것 같다. 아직 익숙하지 않고 길들여지진 않았지만 다음 미션들을 차근차근 해나가면 TDD에 적응될 것 같다!! 각 코드리뷰 PR이다...

Diary 2022.08.05

[JPA] 값 타입

JPA의 데이터 타입을 크게 분류하면 엔티티 타입과 값 타입으로 나눈다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 값 타입은 3가지로 나눌 수 있다. 기본 값 타입 자바 기본타입 래퍼(Wrapper) 클래스 String 임베디드 타입(복합 값) 컬렉션 값 타입 기본 값 타입은 말그대로 자바가 제공하는 기본 데이터 타입이고, 임베디드 타입은 JPA에서 사용자가 직접 정의한 값이다. 컬렉션 타입은 하나 이상의 값 타입을 저장할 때 사용한다. 기본은 다뤘으므로 생략하도록 하겠다. 임베디드 타입(복합 값 타입) 직접 정의한 임베디드 타입도 int, String 처럼 값 타입이다. 공통적으로 ..

JPA 2022.08.05

[JPA] 프록시

프록시와 즉시로딩, 지연로딩 객체는 객체 그래프로 연관된 객체들을 탐색. 그렇지만 객체가 DB에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA구현체들은 이것을 해결하기 위해 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 DB에서 조회하는 것이 아니라, 실제 사용하는 시점에 DB에서 조회할 수 있다. 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회 하는것이 효과적이다. JPA는 즉시로딩과 지연로딩이라는 방법으로 둘을 모두 지원한다. 영속성 전이와 고아 객체 JPA는 연관된 객체를 함께 저장하거나 함께 삭제할 수 있는 영속성 전이와 고아 객체 제거라는 편리한 기능을 제공한다. 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 멤버 엔티..

JPA 2022.08.05

[JPA] 고급 매핑

깃허브 바로가기 이번 장에서 다루는 내용들이다. 상속 관계 매핑 @MappedSuperclass 복합 키와 식별 관계 매핑 조인 테이블 엔티티 하나에 여러 테이블 매핑하기 상속 관계 매핑 RDBMS에는 객체지향 언어처럼 상속이라는 개념이 없다. 대신 그림과 같이 슈퍼타입 서브타입 관계 라는 모델링 기법이 상속 개념과 유사하다. ORM에서의 상속 관계 매핑은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 이 슈퍼타입 서브타입 논리 모델을 실제 테이블로 구현할 때는 3가지 방법중 하나를 선택할 수 있다. 각각의 테이블로 변환 모두 테이블로 만들고 조회할 때 조인을 사용한다. JPA에서는 조인 전략이라고 한다. 통합 테이블로 변환 테이블을 하나만 사용하여 통합한다. JPA에서는 단일 테..

JPA 2022.08.04

[JPA] 다양한 연관관계 매핑

깃허브 바로가기 엔티티 연관관계를 매핑할때는 다음 3가지를 고려해야 한다. 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 단방향, 양방향 테이블은 외래키 하나로 조인을 사용하여 양방향 쿼리가 가능한데 비해, 객체는 참조용 필드를 가지고 있어야만 연관된 객체 조회가 가능하다. 한쪽만 참조하는것이 단방향, 양쪽 서로 참조하는 것이 양방향이다. 연관관계의 주인 연관관계의 주인은 외래키 관리자이고, fk를 소유하고 있는 테이블을 기준으로 관리자 역할을 주면 된다고 생각한다. 다대일 다대일 관계의 반대 방향은 항상 일대다 관계이고 일대다 관계의 반대 방향은 항상 다대일 관계이다. DB테이블의 1, N 관계에서 외래 키는 항상 N쪽에 있다...

JPA 2022.08.04

[JPA] 연관관계 매핑

깃허브 바로가기 엔티티들은 대부분 다른 엔티티와 연관이 있다. 연관관계 매핑 핵심 키워드 방향 : 객체관계에서만 존재하고 실제 테이블 관계는 항상 양방향 단방향 : 두 엔티티중 하나만 참조하는 것이 양방향 : 두 엔티티가 서로 참조하는 것 다중성 : 다대일(N:1), 일대일(1:1), 일대다(1:N), 다대다(N:M) 연관관계의 주인 : 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다. 단방향 연관관계 Member와 Team이 있다고 가정할 때, 팀은 멤버를 여러명 가질 수 있지만, 멤버는 하나의 팀만 가질 수 있는 구조이다. 이것이 다대일관계이다. public class Member { private String id; private String name; private Team team..

JPA 2022.08.04
728x90
반응형