본문 바로가기

전체 글

(17)
[개념] JPA 프로그래밍 - 12. Spring Data JPA 스프링 데이터 JPA 소개 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트 CRUD 처리를 위한 공통 인터페이스를 제공 -> 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있음 save(), findOne(), findAll() 등등 일반적은 CRUD메소드는 JpaRepository 인터페이스가 공통으로 제공하므로 개발자가 구현하지 않아도 된다. 스프링 프레임워크와 JPA를 함께 사용한다면 스프링 데이터 JPA 사용을 적극 추천 public interface MemberRepository extends JpaRepository { } 공통 인터페이스 기능 스프링 데이터 JPA는 간단한 CRUD 기능을 공통으로 처리..
[개념] JPA 프로그래밍 - 10. 객체지향 쿼리 언어 JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리기술을 지원한다. JPQL은 가장 중요한 객체지향 쿼리 언어다. Criteria나 QueryDSL은 결국 JPQL을 편리하게 사용하도록 도와주는 기술이므로 JPA를 다루는 개발자라면 JPQL을 필수로 학습해야 한다. 종류 JPQL (Java Persistence Query Language) Criteria 쿼리 : JPQL을 편하게 작성하도록 도와주는 API, 빌더 클래스 모음 네이티브 SQL : JPA에서 JPQL대신 직접 SQL을 사용할 수 있다. QueryDSL : Criteria 쿼리처럼 JPQL을 편하게 작성하도록 도와주는 빌더 클래스 모음, 비표준 오픈소스 프레임워크다. JDBC직접 사용, MyBatis 같은 SQL..
[개념] JPA 프로그래밍 - 07. 고급매핑 상속 관계 매핑 조인 전략 엔티티 각각을 모두 테이블로 만들고, 자식 테이블이 부모 테이블의 기본키를 받아서 기본키+외래키로 사용하는 전략 주의사항 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없음 따라서 타입을 구분하는 컬럼을 추가해야 한다. (DTYPE 컬럼) @Entity @Inheritance(strategy=IngeritanceType.JOINED) @DiscriminatorColumn(name="DTYPE") public abstract class Item { @Id @GeneratedValue @Column(name="ITEM_ID") private Long id; private String name; private int price; } @Entity @Discriminator..
[개념] JPA 프로그래밍 - 06. 다양한 연관관계 매핑 다대일 다대일 단방향 [N:1] @Entity public class Member { @Id @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; } @Entity public class Team { @Id @Column(name = "TEAM_ID") private String id; private String name; } 회원은 팀을 참조할 수 있지만 반대로 팀에는 회원을 참조하는 필드가 없다. 따라서 회원과 팀은 다대일 단방향 연관관계다. 다대일 양방향 [N:1, 1:N] 양방향은 외래키가 있는 쪽이 연관관계의 주인이다. 일..
[개념] JPA 프로그래밍 - 05. 연관관계 매핑 기초 단방향 연관관계 @ManyToOne 다대일(N : 1) 관계라는 매핑 정보 연관관계를 매핑할 때, 이렇게 다중성을 나타내는 어노테이션 필수 @JoinColumn(name="TEAM_ID") 조인컬럼은 외래키를 매핑할 때 사용 name 속성에 매핑할 외래키 이름 지정 생략 가능 양방향 연관관계 @Entity public class Member { @Id @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; } @Entity public class Team { @Id @Column(name = "TEAM_ID") private Stri..
[개념] JPA 프로그래밍 - 04. 엔티티 매핑 대표적인 매핑 어노케이션 매핑 어노테이션 객체와 테이블 매핑 @Entity, @Table 기본 키 매핑 @Id 필드와 컬럼 매핑 @Column 연관관계 매핑 @ManyToOne, @JoinColumn 필드와 컬럼 매핑 분류 매핑 어노테이션 설명 필드와 컬럼 매핑 @Column 컬럼을 매핑한다. @Enumerated 자바의 enum 타입을 매핑한다. @Temporal 날짜 타입을 매핑한다. @Lob BLOB, CLOB 타입을 매핑한다. @Transient 특정 필드를 데이터베이스에 매핑하지 않는다. (객체에 임시로 어떤 값을 보관하고 싶을 때 사용) 기타 @Access JPA가 엔티티에 접근하는 방식을 지정 @Column 속성 속성 기능 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 ..
[개념] JPA 프로그래밍 - 03. 영속성 관리 영속성 컨텍스트란? JPA를 이해하는 데 가장 중요한 용어 엔티티를 영구 저장하는 환경 여러 엔티티 매니저가 같은 영속성 컨텍스트에 접근할 수도 있음 엔티티 생명주기 비영속 순수한 객체 상태 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없음 영속 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 함 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻 준영속 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 됨 삭제 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제 영속성 컨텍스트의 특징 영속성 컨텍스트는 엔티티를 식별자 값(@Id)으로 구분하므로 영속 상태는 식별자 값이 반드시 있어야 함 JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장..
[개념] JPA 프로그래밍 - 01. JPA 소개 패러다임 불일치 '객체지향 프로그래밍'은 추상화, 캡슐화, 은닉화, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다. '관계형 데이터베이스'는 데이터 중심으로 구조화, 집합적인 사고를 필요로하며, 추상화, 상속다형성 같은 개념이 없다. 객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 다르다. 이것을 객체와 관계형 데이터베이스의 패러다임 불일치 문제라 한다. 따라서 객체 구조를 테이블 구조에 저장하는데는 한계가 있다. 이런 문제를 개발자가 중간에서 해결해야 하는데, 패러다임 불일치 문제를 해결하는데 너무 많은 시간과 코드를 소비한다. JPA란 무엇인가? JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이며, 어플리..