스프링 공부 77

[JPA] 7. 필드와 컬럼 매핑

테이블 자체를 매핑했다면, 테이블 내에 있는 컬럼을 필드와 매핑해주어야 한다. 이를 위해 사용하는 몇가지 어노테이션부터 정렬해보자면, @Column 일반적인 데이터베이스의 컬림 명시 @Temporal 자바의 Time, Date, TimeStamp을 매핑한다. (요즘은 LocalDate, LocalDateTime을 사용하기에 잘 쓰지 않는다. . ) @Enumrated enum타입을 쓸 때, 그 값을 어떻게 저장할지 정해준다. @Lob 사이즈가 매우 큰 문자열 저장에 쓰인다. @Transient 해당 자바 변수를 매핑하고 싶지 않을 때 쓴다. 이렇게가 존재한다. 표에 다 적긴 힘들어서 하나씩 부연설명을 적어야 할 것 같다. @Column : 기본적인 컬럼 매핑에 사용한다. 즉, 이게 적혀있다면 데이터베이스..

[JPA] 6. 기본키 매핑

엔티티를 만들어서 @Entity, @Table만 매핑을 한다면 에러가 발생한다. 이유는 테이블엔 무조건 기본키가 존재해야 하기 때문이다. 이 기본키는 쉽게 @Id라는 어노테이션으로 등록시킬 수 있다. @Id만 존재한다면 기본키를 직접 입력시켜주어야 한다. 하지만, 다른 입력되는 값들, 연산되는 값들과 다르게 기본키는 다른 값을 통해서 사용하거나, 다른 값을 가져와 사용하면 안된다. (주민등록번호나 전화번호같은 경우에도 사람마다 다르겠지만, 사용하는 걸 권장하는 곳은 없다. ) 그렇기 때문에 기본키 자체의 생성방식을 설정시켜준다. 이를 @GeneratedValue(strategy = GenerationType.????)처럼 작성해 생성방식을 명시해준다. ???? = IDENTITY 데이터베이스에게 기본키 ..

[JPA] 5. 테이블 자체의 어노테이션에 대하여

@를 붙여 매핑시키는 것을 어노테이션이라고 한다. 이를 이용해 테이블엔 어떤 것을 매핑시킬까? @Entity, @Table을 주로 사용한다. 각 어노테이션이 무슨 용도로 쓰이는지 알아야 한다. @Entity : JPA가 관리하는 객체, 즉 엔티티임을 명시해주는 용도이다. 클래스 내에 기본 생성자가 필수적으로 있어야 한다. final, enum, interface, inner에는 사용할 수 없다. 저장할 필드에 final을 사용하지 않는다. (그냥 private을 쓰는게 일반적인 것 같다. ) @Table : 객체가 이미 데이터베이스에 존재하는 테이블과 매핑을 할 경우, 그 테이블을 지정해주는 역할을 한다. @Table이후 괄호를 이용해 (Name = "~~", Catalog = ~~~)의 방법으로 추가로..

[JPA] 4. 객체를 데이터베이스와 매핑시키기 - 엔티티 매핑

객체-관계형 데이터베이스를 매핑시키는 프레임워크인 JPA를 쓰는 것이 좋은 이유들에 대해 알아보았다면, 이젠 정말로 어떻게 매핑을 시킬지 알아야 한다. 이론을 배워도 기술을 쓰기 위핸 기술을 배워야 한다! 객체-관계형 데이터베이스를 매핑시켜주는 방법은, 관계형 데이터베이스의 구조를 간단하게 봐야 할 필요가 있다. 객체(Entity)를 만들 때, 객체에 매핑을 해서, 객체 클래스를 하나의 테이블로 만들 수 있다. 객체 테이블 @Entity, @Table 필드와 컬럼 @Column, @Temporal, @Enumarted, @Lob, @Transient 기본키 @Id, @GeneratedValue 연관관계 매핑(외래키) @ManyToOne, @OneToMany, @ManyToMany, @JoinColumn ..

[JPA] 3. JPA의 중요성 - ORM, Persistence Context

ORM을 위해 JPA를 쓴다는 것 까지는 이해했다. 하지만, 그 외에도 영속성 컨텍스트라는 중요한 개념이 존재한다. 영속성 컨텍스트는 객체의 상태에 관한 것이다. 객체는 데이터베이스에 저장되었는가, 아닌가로 구분된다기 보단, 생명주기와 관련되어 있다. 영속성 컨텍스트 : 엔티티 자체를 영속화시킨다(DB에 저장된다는 것과는 조금 다른 개념이다) 객체가 영속화되었는가 아닌가를 기준으로 판단되며, 영속화된다는 것은 데이터베이스에 저장된다는 것과 동일한 개념은 아니다. 엔티티의 생명 주기를 통해 영속성에 관해 이야기를 한다. 비영속상태 영속성 컨텍스트와는 상관없는 새로운 상태의 객체 영속 상태 비영속상태의 객체를 영속화 시킨 상태 준영속 상태 영속성 컨텍스트에서 객체를 빼낸 상태 삭제 상태 객체 자체를 삭제시킨..

[JPA] 2. 그러면 JPA는 또 무엇일까?

JPA : Java Persistance API 직역하자면 자바 영속성 API이다. ORM은 객체와 관계형 데이터베이스의 매핑이라고 한다면, JPA는 자바에서 사용하는 ORM 프레임워크라고 생각하면 된다. 자바 애플리케이션(우리가 코딩해서 만든 프로그램)과 JDBC API 사이에 존재한다. JPA의 기능은 객체를 분석한다. Create, Read, Update, Delete등에 맞게 sql문을 만들어준다. JDBC API를 사용한다. ResultSet 매핑 객체 지향 프로그래밍과 관계형 데이터베이스의 패러다임 차이점을 극복시켜준다. 이를 통해 우리는 이러한 JPA를 통해 현대에 가장 자주 사용하는 관계형 데이터베이스를 이용해 객체지향 프로그래밍을 할 수 있다. 즉, SQL에 중점을 두고 개발하던 상황에서..

[JPA] 1. ORM이란 무엇인가?

모든 개념의 시작은 ORM을 먼저 알고 시작해야할 것 같다. ORM : Object-Relational Mapping(객체 관계형데이터베이스 매핑) 상속 관계형 데이터베이스 상속관계는 없다고 봐도 무방할 정도라고 한다. 객체 객체는 상속을 통해 상속받은 객체의 함수등을 불러와 사용할 수 있다. 연관관계 관계형 데이터베이스 학교의 데이터베이스 수업시간에 배운 것은, 관계형 데이터베이스는 서로 기본키, 외래키를 이용한 Join이 가능하기에, 최대한 데이터베이스를 잘게 쪼개고, 이를 통해 서로 참조를 한다. 이를 통해 양방향으로 탐색할 수 있다는 장점이 있다. 객체 자바에서 객체는 참조를 통해 등록된다. 즉, 상속을 받는 객체에서 상속된 객체를 가져올 수 있지만, 상속시킨 객체에는 상속받는 객체에 대한 정보가..