Entity란?
- 실체, 객체 라는 의미
- 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(명사)
ex. [엔터티]학생 - [속성]학번, 이름, 학점, 전공 등 - 즉, 정보를 저장할 수 있는 것을 일컫음
전체 Code
@Entity
@Getter
@AllArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "user_id" ,nullable = false, unique = true, length = 30)
private String user_id;
@Column(nullable = false, length = 10)
private String user_name;
@Column(nullable = false, length = 30)
private String user_password;
}
💡 Feedback
Setter는 값을 변경할때 사용하는 것이며, 값변경은 사용하지 않는 것이 좋으므로,
가급적 @Setter의 작성은 삼가는 것이 좋다.
Annotation(@) 분석
- @Entity
- 데이터베이스의 테이블과 링크(연결)될 클래스 라는 의미
- 기본값으로 @Entity가 작성된 클래스명을 카멜케이스로 바꾼 것으로 데이터 베이스의 테이블 이름을 매칭
(ex. MemberAccount → member_account)
- @Id
@Id private int id;- 해당 데이터 베이스 테이블의 PK(Primary Key)필드 표시
- 속성에 직접 이 어노테이션을 붙여주면 실행시점에 객체의 필드를 통해 직접 접근하게 된다.
- 만약, Getter에 이용하려면 Getter에 @Id를 작성해 주면 된다.
※Setter에 단독으로 @Id작성시, 예외가 발생한다. - 속성을 나타내는 변수 위에 @Id를 작성할 시, setter, getter없이도 작업이 가능하게 된다.
- @Column 어노테이션을 지정하지 않으면 열 이름은 기본 키 속성 또는 필드의 이름으로 가정한다.
- @GeneratedValue없이 @Id만 사용한다면 직접 할당이 된다.
- 즉, persist()메서드를 호출하기 전에 애플리케이션에서 직접 식별자 값을 할당해야 하며,
식별자 값이 없을 경우 에러를 발생시킨다.
사용 가능 유형 예시 기본타입 int, long, double, char... 기본 Wrapper 유형 Interger, Long, Double String - java.util.Date Date date = new Date() java.sql.Date java.sql.Date date = new java.sql.Date() java.math.BigDecimal new BigDecimal(value); java.math.BigInteger BigInteger bigNum = BigInteger.valueOf(value)
- @GeneratedValue
- PK(Primary Key)의 작성 규칙 표시(자동 생성 전략 명시)
- 선택적 속성
- Generator
- Strategy
- 주키 생성 전략
- AUTO
- (persistence provider가) 특정 DB에 맞체 자동 선택
- IDENTITY
- DB의 identity컬럼을 이용
- SEQUENCE
- DB의 시퀀스 컬럼을 이용
- 데이터베이스의 특별한 오브젝트 시퀀스를 사용하여 기본키를 생성한다.
- TABLE
- 유일성이 보장된 데이터베이스 테이블을 이용
- AUTO
- Spring Boot 2.0부터는 auto_increment를 위해서 GenerationType.IDENTITY 옵션 추가가 필수적임
- @Column
- DB 테이블의 칼럼임을 표시
- Column이란?
- 테이블의 칼럼(column)이란 테이블을 구성하는 각각의 열에 위치한 정보
- 즉, 속성(Attribute)을 의미한다.
- ex. 사번, 이름, 부서, 입사연도
사번 이름 부서 입사연도 #0001 김가가 개발 2020 #0002 이나나 마케팅 2019 #0003 홍다다 회계 2022
- Column이란?
- 작성이 필수는 아니며, 기본값(변수명, 글자 길이, null여부 등) 외에 변경이 필요한 옵션이 존재할 경우 사용
- DB 테이블의 칼럼임을 표시
- @ManyToOne / @OneToMany
- 관계형 데이터 베이스(SQL)에서 관계 매핑을 위한 어노테이션
- 각각 n : 1과 1 : n을 나타냄
Lombok
Java 라이브러리의 하나로 Getter, Setter, toString 등의 반복되는 메서드 작성 코드를 줄여주는 코드
- @Data
- 아래의 모든 어노테이션을 포함하는 어노테이션이다.
- @Setter
- 현재 클래스 내 모든 멤버변수의 setter를 생성시킨다.
- @Getter
- 현재 클래스 내 모든 멤버변수의 getter를 생성시킨다.
- @NoArgsConstructure
- 현재 클래스의 기본 생성자(매개변수 없는 생성자)를 만들어 준다.
- @AllArgsConstucto
- 현재 클래스 내 모든 멤버 변수를 받는 생성자를 만들어준다
- @RequiredArgsConstructor
- 클래스의 멤버변수 중 final혹은 Lombok 어노테이션인 @NonNull이 붙은 멤버변수만을 받는 생성자를 만들어준다.
- @Builder
- 해당 클래스의 빌더 패턴(builder pattern) 클래스 생성
- 생성자 상단에 선언시 생성자에 포함된 필드만 빌더에 포함된다.
post = Post.builder() .title(title) .content(content) .author(author) .build(); - @ToString
- 클래스의 멤버 변수들에 toString을 적용하여 변수들을 출력할 수 있게 해준다.
- exclude를 통해 제외할 필드를 지정할 수 있다 (@ToString(exclude = “변수명”)
- @NonNull
- 변수에 선언시, 해당값은 반드시 값이 있어야한다.
- Setter에 null값이 들어오면 NullPointerException을 발생시킨다.
회고
참고자료
[게시판]
[Spring Boot] 게시판 구현 1 - Entity 및 Repository 만들기
🔧 환경 설정 Spring Boot 2.4.3 OpenJDK 15 Gradle ※ 이 글에서는 Spring Boot 초기 설정 및 FrontEnd 관련 내용은 다루지 않습니다. 📝 Setting 여러가지 이유로 이 프로젝트에서는 Spring Data Jpa를 적
velog.io
[테이블 설계 & 개발]
https://it-mesung.tistory.com/206
[Spring Boot JPA] 테이블 설계 및 Entity 개발 시 주의사항
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의 실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부
it-mesung.tistory.com
[@Id, @GeneratedValue]
https://rutgo-letsgo.tistory.com/306
@Id / @GeneratedValue에 대해 알아보자
@Id / @GeneratedValue에 대해 알아보자 PK를 나타내기 위해 @Id 어노테이션을 사용하며, 생성 전략을 정의하기 위해 @GeneratedValue 를 사용한다. 해당 어노테이션에 대해서 알아보도록 하자. @Id package javax
rutgo-letsgo.tistory.com
[JPA 어노테이션]
Spring-boot JPA 어노테이션 @Entity, @Table, @Column, @Id @Lombok
객체 - 테이블 맵핑 : @Entity, @Table필드 - 컬럼의 팹핑 : @Column기본키의 맵핑 : @Id조인 맵핑 : @ManyToOne, @JoinColumn@Entity 어노테이션을 클래스에 선언하면 그 클래스는 JPA가 관리한다. 그러므로 DB의 테
velog.io
JPA 기본 사용 문법 파악하기
@Entity @Entity 어노테이션은 데이타베이스의 테이블과 일대일로 매칭되는 객체 단위이며 Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미합니다. 그래서 객체의 인스턴스를 구
jogeum.net
[lombok]
https://goyunji.tistory.com/98
[lombok] 생성자 관련 어노테이션 @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor
롬복을 사용하면 깔끔하게 getter, setter , 생성자 등등 만들어준다! 근데 잘 모르고 사용하다 보면 에러가 발생할 수 있음. 주의하자. @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor public..
goyunji.tistory.com
Notion 정리 자료
https://flaxen-chanter-0fa.notion.site/02-Entity-1a82afc1738f4aa486f56c27067bcaa5
02. Entity 작성하기
Entity
flaxen-chanter-0fa.notion.site
'Study > Spring' 카테고리의 다른 글
| Spring 초기 설정 (0) | 2022.02.14 |
|---|
댓글