본문 바로가기

프로그래밍/JPA6

[JPA] 스프링 데이터 JPA 김영한님의 책 [JPA 프로그래밍]을 읽고 요약한 내용입니다. 스프링 데이터 JPA 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트이다. 원래라면 일일히 구현해야 했던 데이터 접근 계층에서(repository) 각 엔티티의 기본적인 CRUD를 공통 인터페이스로 한 방에 처리하여 귀찮음을 엄청나게 덜어 준다. public interface MemberRepository extends JpaRepository { } 이렇게 엔티티 타입과 @Id로 지정한 필드의 타입을 제네릭에 넣어서 JpaRepository를 상속하는 인터페이스만 만들어도 기본적인 Member에 대한 데이터베이스 CRUD를 쓸 수 있게 된다. 주요 공통 인터페이스 메소드 save(Entity) : 새로운 엔티티 저.. 2021. 5. 29.
[JPA] 객체지향 쿼리 언어 김영한님의 책 [JPA 프로그래밍]을 읽고 요약한 내용입니다. 객체지향 쿼리 기본적인 CRUD 외에 좀 더 복잡한 쿼리로 데이터를 조회하고 싶을 때, SQL을 쓰는게 더 낫겠다 싶을 때에는 JPA의 객체지향 쿼리를 쓰면 된다. SQL과 비슷하게 생겼지만 데이터베이스에 직접 조회하는 용도는 아니고 대신 JPA가 적절히 SQL로 변환해서 조회결과를 엔티티 객체로 반환해 준다. JPQL Java Persistence Query Language 엔티티 객체를 조회하는 객체지향 쿼리이다. 특정 데이터베이스 벤더에 의존하지 않으며, dialect만 변경하면 작성한 JPQL을 수정하지 않고도 다양한 관계형 데이터베이스를 바꿔가며 쓸 수 있다. SQL보다 간결하게 생겼다. JPQL 기본 문법과 쿼리 API SQL과 구.. 2021. 5. 29.
[JPA] Embedded Type 김영한님의 책 [JPA 프로그래밍]을 읽고 요약한 내용입니다. 임베디드 타입 자바 기본 타입이나 객체 말고 따로 직접 정의해서 값으로 사용할 수 있다. 이것을 JPA에서는 임베디드 타입(embedded type)이라고 한다. 좀 더 응집력 있고 객체지향 적인 매핑을 할 때 사용한다. @Embeddable public class Period { @Temporal(TemporalType.DATE) private Date startDate; @Temporal(TemporalType.DATE) private Date endDate; public void 뭐시기(){...대충 이 embedded를 위한 메소드...} //기본 생성자 필수 } @Entity public class Member { @Id privat.. 2021. 5. 28.
[JPA] 프록시와 지연로딩, CASCADE 김영한님의 책 [JPA 프로그래밍]을 읽고 요약한 내용입니다. 프록시와 즉시로딩, 지연로딩 : 객체 그래프 탐색 중에 연관된 객체를 데이터베이스에서 불러올 때 JPA 구현체들은 프록시라는 기술을 사용한다. 실제 객체를 사용하는 시점에 데이터베이스에 조회하는 것을 지연로딩이라고 한다. 프록시 @Entity public class Student{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="STUDENT_ID") private Long id; @ManyToOne @JoinColumn(name="SCHOOL_ID") private School school; } @Entity public class School{ @Id @Column(.. 2021. 5. 28.
[JPA] 앤티티 매핑, 연관관계 매핑, 상속관계 매핑 김영한님의 책 [JPA 프로그래밍]을 읽고 요약한 내용입니다. 클래스 어노테이션 @Entitiy 테이블과 매핑할 클래스에 필수로 써야함 기본생성자 필수 @Table 엔티티와 매핑할 테이블 지정 name, uniqueConstraints 등의 속성이 있음 @Access JPA가 엔티티에 접근하는 방식 지정 필드 어노테이션 @Id Primary Key 매핑 데이터베이스 생성 키 사용 등의 설정을 할 수 있음 @Column 클래스 필드와 테이블의 콜럼을 매핑 name, nullable,length 등의 속성이 있음 @Enumerated 자바 enum 타입의 필드를 테이블 콜럼과 매핑 @Enumerated(EnumType.STRING) : enum의 이름을 저장 @Enumerated(EnumType.ORDINA.. 2021. 5. 28.
[JPA] JPA소개와 JPA의 Persistence Context 김영한님의 책 [JPA 프로그래밍]을 읽고 요약한 내용입니다. JPA는 무엇인가? JPA(Java Persistence API)는 자바진영의 표준 ORM(Object-Relational Mapping) 명세(인터페이스 모음) JPA의 명세에 맞게 구현되어 나와있는 ORM 프레임워크를 사용하여 개발을 하면 된다. 보통 하이버네이트(Hibernate)를 많이 쓴다. JPA를 사용하면 SQL에 의존적인 개발을 그만할 수 있게 된다. SQL 매퍼(MyBatis 같은 것들)를 사용해 데이터베이스 응답 결과를 객체에 매핑하여 사용하면 사실 어느정도 편하게 백엔드 개발을 할 수가 있긴 하지만 SQL을 계속 개발자가 관리를 해야한다. 이 점이 싫은 사람들을 위해 ORM이 생긴 것 아닐까? JPA는 자바 컬렉션에 데이터.. 2021. 5. 23.