DBMS
-
JPA 스프링 데이터 JPA (Spring Data JPA) - 1DBMS/JPA 2024. 8. 13. 22:50
스프링 데이터 JPA (Spring Data JPA) 지금까지는 jpa를 직접 이용해서 코드를 구성해왔다.오늘은 스프링 데이터 JPA를 통해서 조금 더 쉽게 객체지향적 프로그래밍을 알아가보겠다. 1. 예제 도메인 모델1 - 1. Member 엔티티@Entity@Getter @Setter@NoArgsConstructor(access = AccessLevel.PROTECTED)@ToString(of = {"id", "username", "age"})public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age..
-
JPA 객체지향 쿼리 언어(JPQL)DBMS/JPA 2024. 8. 10. 07:19
JPA 객체지향 쿼리 언어(JPQL) 1. JPA는 다양한 쿼리 방법을 지원• JPQL• JPA Criteria• QueryDSL• 네이티브 SQL• JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 1 - 1. JPQL• JPA를 사용하면 엔티티 객체를 중심으로 개발• 문제는 검색 쿼리• 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색• 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능• 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검 색 조건이 포함된 SQL이 필요 • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공• SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JO..
-
JPA 값타입DBMS/JPA 2024. 8. 9. 23:41
JPA 값타입 1. JPA의 데이터 타입 분류엔티티 타입 • @Entity로 정의하는 객체• 데이터가 변해도 식별자로 지속해서 추적 가능• 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 • int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체• 식별자가 없고 값만 있으므로 변경시 추적 불가• 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 2. 값 타입 분류기본값 타입 • 자바 기본 타입(int, double) • 래퍼 클래스(Integer, Long) • String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 3. 기본값 타입• 예)..
-
JPA 프록시와 연관관계 관리DBMS/JPA 2024. 8. 9. 23:21
JPA 프록시 1. 프록시1 - 1. em.find() vs em.getReference()• em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회• em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 1 - 2. 특징• 실제 클래스를 상속 받아서 만들어짐• 실제 클래스와 겉 모양이 같다.• 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨(이론상) • 프록시 객체는 실제 객체의 참조(target)를 보관• 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 • 프록시 객체는 처음 사용할 때 한 번만 초기화 • 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님, 초기화되면 프록시 객..
-
JPA 상속관계 매핑DBMS/JPA 2024. 8. 9. 22:59
JPA 상속관계 매핑 사실 관계형 데이터베이스는 상속 관계가 없다.하지만 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 = 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑위와 같이 정의하겠다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 • 각각 테이블로 변환 -> 조인 전략• 통합 테이블로 변환 -> 단일 테이블 전략• 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 1. 주요 어노테이션• @Inheritance(strategy=InheritanceType.XXX) • JOINED: 조인 전략 • SINGLE_TABLE: 단일 테이블 전략 • TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 • @Disc..
-
JPA 연관관계 매핑DBMS/JPA 2024. 8. 9. 22:45
JPA 연관관계 매핑 연관관계 매핑시 고려사항 3가지• 다중성• 단방향, 양방향• 연관관계의 주인 1. 다대일 [N:1] 1 - 1. 다대일 단방향• 가장 많이 사용하는 연관관계• 다대일의 반대는 일대다 1 - 2. 다대일 양방향• 외래 키가 있는 쪽이 연관관계의 주인 • 양쪽을 서로 참조하도록 개발 2. 일대다 [1:N]2 - 1. 일대다 단방향• 일대다 단방향은 일대다(1:N)에서 일(1)이 연관관계의 주인• 테이블 일대다 관계는 항상 다(N) 쪽에 외래 키가 있음• 객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하 는 특이한 구조• @JoinColumn을 꼭 사용해야 함. 그렇지 않으면 조인 테이블 방식을 사용함(중간에 테이블을 하나 추가함) 단점• 엔티티가 관리하는 외래 키가 다..
-
JPA 엔티티 매핑DBMS/JPA 2024. 8. 9. 20:27
JPA 엔티티 매핑 1. 객체와 테이블 매핑 1 - 1. @Entity• @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.• JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수• 주의 • 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) • final 클래스, enum, interface, inner 클래스 사용X • 저장할 필드에 final 사용 X 1 - 1 - 1. 속성name• JPA에서 사용할 엔티티 이름을 지정한다.• 기본값: 클래스 이름을 그대로 사용(예: Member)• 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. 1 - 2. @Table엔티티와 매핑할 테이블 지정 1 - 2 - 1. 속성 name 매핑할 테이블..
-
JPA 영속성DBMS/JPA 2024. 8. 9. 19:48
JPA 영속성 1. 영속성 컨텍스트엔티티를 영구 저장하는 환경영속성 컨텍스트는 논리적인 개념이다.눈에 보이지 않는다.엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. 2. 엔티티의 생명주기• 비영속 (new/transient)영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 • 영속 (managed)영속성 컨텍스트에 관리되는 상태 • 준영속 (detached)영속성 컨텍스트에 저장되었다가 분리된 상태 • 삭제 (removed)삭제된 상태 3. 영속성 컨텍스트의 이점• 1차 캐시• 동일성(identity) 보장• 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind)• 변경 감지(Dirty Checking)• 지연 로딩(Lazy Loading) 3 - 1. 1차캐시Memb..