전체 글
-
JPA - 8. 객체지향 쿼리 언어 (JPQL) - 1Java 2020. 7. 29. 14:16
객체 지향 쿼리 언어 소개 - JPQL - JPA Criteria - QueryDSL - 네이티브 SQL - JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 과 함께 사용 JPQL 소개 - 가장 단순한 조회 방법 - EntityManager.find() - 객체 그래프 탐색 (a.getB().getC()) - 나이가 18살 이상인 회원을 모두 검색하고 싶다면 ? JPQL - JPA를 사용하면 엔티티 객체를 중심으로 개발 - 문제는 검색 개발 - 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 - 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 - 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 - JPA는 SQL을..
-
JOINDatabase 2020. 7. 28. 20:46
조인 - 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 따라서 조인은 테이블로서 저장되거나, 그 자체를 이용할 수 있는 결과 셋을 만들어 낸다. JOIN은 2개의 테이블에서 각각의 공통값을 이용함으로써 필드를 조합하는 수단이 된다. ANSI 표준 SQL은 네가지 유형의 JOIN을 규정한다. 1. INNER JOIN 2. OUTER JOIN 3. LEFT JOIN 4. RIGHT JOIN 교차 조인 - CROSS JOIN 절은 조인되는 두 테이블에서 곱집합을 반환한다. 즉, 두 번째 테이블부터 각 행과 첫 번째 테이블에서 각 행이 한번씩 결합된 열을 만든 것이다. ex) m행을 가진 테이블과 n행을 가진 테이블이 교차 조인되면 m * n 개의 행을 생성한다. // 명시적..
-
JPA - 7. 값 타입Java 2020. 7. 27. 19:53
기본값 타입 JPA의 데이터 타입 분류 - 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 지속해서 추적 가능 - 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 - 값 타입 - int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 - 식별자가 없고 값만 있으므로 변경시 추적 불가 - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 - 기본값 타입 - 자바 기본 타입 (int, double) - 래퍼 클래스 (Integer, Long) - String - 임베디드 타입 (embedded type, 복합 값 타입) - 컬렉션 값 타입 (collection value type) 기본값 타입 - 예) String ..
-
JPA - 2. 엔티티 매핑Java 2020. 7. 26. 14:32
객체와 테이블 매핑 @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 - 1. 영속성 관리 - 내부 동작 방식Java 2020. 7. 26. 14:03
JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 2. 영속성 컨텍스트 영속성 컨텍스트 - JPA를 이해하는데 가장 중요한 언어 - "엔티티를 영구 저장하는 환경" 이라는 뜻 - EntityManager.persist(entity); 엔티티 매니저 ? 영속성 컨텍스트 ? - 영속성 컨텍스트는 논리적인 개념 - 눈에 보이지 않는다. - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 - 비영속 (new/ transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 - 영속 (managed) 영속성 컨텍스트에 관리되는 상태 - 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 - 삭제 (removed) 삭제된 상태 영속성 컨텍스트의 이점 - 1..
-
JPA - 0. JPA 소개, DB 용어 정리Java 2020. 7. 26. 13:36
SQL 중심 개발의 문제점 - 객체를 관계형 DB에 관리 - SQL 중심적인 개발 - CRUD 의 무한 반복, 지루한 코드 - 패러다임의 불일치 : 객체 vs 관계형 데이터베이스 - 객체를 관계형 데이터베이스에 저장. 객체 -> SQL 변환 -> RDB(SQL) - 객체와 관계형 데이터베이스의 차이 1. 상속 2. 연관관계 3. 데이터 타입 4. 데이터 식별 방법 1. 객체의 경우 상속이 존재하지만 Table의 경우 상속이 존재하지 않고 비슷한 슈퍼타입 서브타입 관계가 존재한다. -> 자바 컬렉션을 예시로 설명 2. 객체는 참조를 사용, 테이블은 외래 키를 사용 -> 객체는 자유롭게 객체 그래프를 탐색할 수 있어야 한다. 결국 객체를 객체답게 모델링 할 수록 매핑 작업만 늘어난다. 객체를 자바 컬렉션에 ..
-
JPA - 4. 다양한 연관관계 매핑Java 2020. 7. 25. 18:16
연관관계 매핑시 고려사항 3가지 1. 다중성 2. 단방향, 양방향 3. 연관관계의 주인 1. 다중성 - 다대일 : @ManyToOne - 일대다 : @OneToMany - 일대일 : @OneToOne - 다대다 : @ManyToMany 2. 단방향, 양방향 - 테이블 - 외래키 하나로 양쪽 조인 가능 - 사실 방향이라는 개념이 없다. - 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 - 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 - 객체 양방향 관계는 A -> B , B -> A 처럼 참조가 2군데 - 객체 양방향 관계는 참조가 2군데 있다. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야 한다. - 연관관계의 ..
-
JPA - 3. 연관관계 매핑Java 2020. 7. 25. 17:33
- 연관관계가 필요한 이유 - 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. - 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. - 객체는 참조를 사용해서 연관된 객체를 찾는다. - 테이블과 객체 사이에는 이런 큰 간격이 있다. - 객체 지향 모델링 / 단방향 연관관계 // 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..