오늘 공부한 내용

  • Spring 백오피스 프로젝트 / 리뷰 CRUD 만들기
  • 베이직 클래스 보충수업 / 데이터 베이스 실습
  • 코드카타 2문제

 

어려웠던 내용

  •  프로젝트 API 구상

 

새로 알게된점

  • Entity 매핑, @어노테이션 구분

1. @Entity 

@Entity 어노테이션은 JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션이다. 이 어노테이션을 붙임으로써 JPA가 해당 클래스를 관리하게 된다.

속성 기능
name JPA에서 사용할 엔티티 이름 지정
name을 쓰지 않을 경우 (default) 클래스이름을 엔티티 이름으로 지정

아래의 코드 결과를 보면 name = "user2"로 함으로써 user2 테이블이 생성된 것을 볼 수 있다.

@Entity(name = "user2")
public class User {}

테이블 생

2. @Table

@Table은 엔티티와 매핑할 테이블을 지정

속성 기능
name 매핑할 테이블 이름
생략시 엔티티 이름(@Entity(name="~") 사용
catalog catalog 기능이 있는 DB에서 catalog 매핑
schema schema기능이 있는 DB에서 schema 매핑
uniqueContraints DDL 생성시 유니크 제약조건 생성
 스키마 자동 생성 기능을 사용해 DDL을 만들 때만 사용

아래 코드 결과를 보면 @Table에 name을 추가하면 테이블이름이 name값으로 설정이 되고 생략시 Entity이름으로 테이블이 만들어지는 것을 확인할 수 있다.

@Entity
@Table(name = "user3")
@Getter
@Setter
public class User {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
}

user3 명칭으로 테이블 생성

@Entity(name="user2")
@Table
@Getter
@Setter
public class User {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
}

user2 명칭으로 테이블 생성

 

3. @Id

@Id는 특정 속성을 기본키로 설정하는 어노테이션이다.

@Entity
@Table(name = "User")
public class User {
    @Id
    private Long id;
    private String name;
}

@Id 어노테이션만 적게될 경우 기본키값을 직접 부여해줘야 한다.

하지만 보통 DB를 설계할 때는 기본키는 직접 부여하지 않고 Mysql AUTO_INCREMENT처럼 자동 부여되게끔 한다.

@Entity(name="user2")
@Table
@Getter
@Setter
public class User {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
}

@GeneratedValue 어노테이션을 사용하면 기본값을 DB에서 자동으로 생성하는 전략을 사용 할 수 있다.

전략에는 IDENEITY, SEQUENCE, TABLE 3가지가 있다.

속성 기능
@GeneratedValue(startegy = GenerationType.IDENTITY) 기본 키 생성을 DB에 위임 (Mysql)
@GeneratedValue(startegy = GenerationType.SEQUENCE) DB시퀀스를 사용해서 기본 키 할당 (ORACLE)
@GeneratedValue(startegy = GenerationType.TABLE) 키 생성 테이블 사용 (모든 DB 사용 가능)
@GeneratedValue(startegy = GenerationType.AUTO) 선택된 DB에 따라 자동으로 전략 선택

위 처럼 다양한 전략이 있는 이유는 DB마다 지원하는 방식이 다르기 때문이다.

AUTO 같은 경우DB에 따라 전략을 JPA가 자동으로 선택한다. 이로 인해 DB를 변경해도 코드를 수정할 필요 없다는 장점이 있다.

 

4. @Column

@Column은 객체 필드를 테이블 컬럼과 매핑한다.

@Column
private String name;
속성 기능
name 필드와 매핑할 테이블의 컬럼 이름 지정
default는 필드이름으로 대체
insertable true : 엔티티 저장시 필드값 저장
false : 필드값이 저장되지 않음
updatable true : 엔티티 수정시 값이 수정
false : 엔티티 수정시 값이 수정 되지 않음
table 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용
nullable  null값 허용 여부 설정
false : not null 제약 조건
unique 컬럼에 유니크 제약조건 부여
columnDefinition 데이터베이스 컬럼 정보를 직접 부여
length 문자 길이 제약조건
String 타입일 때 사용
precision, scale BigDecimal 타입에서 사용
precision : 소수점을 포함한 전체 자릿수 설정
scale : 소수의 자릿수

 

 

오늘의 느낀점

오늘 베이직 수업을 들으면서 @Entity 구성에 많이 사용되는 Jpa 어노테이션을 재복습 하는 시간을 가졌다.
해당 어노테이션이 자세하게 파고 들지은 않아서 어떤 역할을 하는지  대충 알고있는 형태로만 알고 있었는데 이번 프로젝트를 하면서 어노테이션에 대해서 세부적으로 기본개념에대한 설명을 읽으면서 알아보니 좀더 잘이해가되어 앞으로도 적용하는데 도움이 될거 같다.

 

+ Recent posts