오늘 공부한 내용
- 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 : 소수의 자릿수 |
오늘의 느낀점
'개발자 일지 > 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 |