오늘 공부한 내용
- 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;
}
@Entity(name="user2")
@Table
@Getter
@Setter
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
}
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 어노테이션을 재복습 하는 시간을 가졌다.
해당 어노테이션이 자세하게 파고 들지은 않아서 어떤 역할을 하는지 대충 알고있는 형태로만 알고 있었는데 이번 프로젝트를 하면서 어노테이션에 대해서 세부적으로 기본개념에대한 설명을 읽으면서 알아보니 좀더 잘이해가되어 앞으로도 적용하는데 도움이 될거 같다.
'개발자 일지 > TIL' 카테고리의 다른 글
스파르타 내일배움캠프 69일차 231212 (0) | 2023.12.13 |
---|---|
스파르타 내일배움캠프 65일차 231208 (0) | 2023.12.11 |
스파르타 내일배움캠프 63일차 231206 (0) | 2023.12.06 |
스파르타 내일배움캠프 62일차 231205 (1) | 2023.12.06 |
스파르타 내일배움캠프 61일차 231204 (1) | 2023.12.05 |