본문 바로가기
spring/JPA

JPAEntity

by coie 2021. 5. 21.

JPA에 대해서 공부하고 있는데

워낙에 할게 많아서 미리미리 조금씩 정리를 해둬야겠다? 라고 생각해서

포스팅을 해야겠다~ 라고 생각했습니다.

 

JPA에서는

mapper가 아닌 entity 즉 객체를 이용하여

데이터베이스와 매핑한다.

@Entity//DB와 매핑할 객체임을 알려준다.
@Table(name = "USERTABLE")//클래스이름과 테이블의 이름이 다른경우 Table로 따로 선언
@NoArgsConstructor(access = AccessLevel.PROTECTED)//안전한 객체 생성을 위해서, 접근 제어
@Getter
@ToString
@SequenceGenerator(name = "User_Seq_Generator",sequenceName = "User_seq",initialValue = 1,allocationSize = 1)
//시퀀스 생성 식별자 생성기 이름, db에 등록될 시퀀스 이름, 시작하는 수, 증가하는 수
public class User {

    @Id//Db기본키
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "User_Seq_Generator")//오라클의 경우 시퀀스로 지정 auto로 설정해도 됨.
    private long id;
    @Column(nullable = false)
    private String username;
    @Column(nullable = false)
    private String password;

    @Builder//특정한 경우에 사용되는 값들만 builde  r을 이용하여 setter생성
    //setter만 사용할경우 목적을 알기 어렵다.또한, setter의 무분별한 사용보다 알기 쉬움.
    public void UserLogin(String username,String password){
        this.username=username;
        this.password=password;
    }


}

 

 

 

 

 

먼저 위에서 부터 하나씩 본다면

@Entity//DB와 매핑할 객체임을 알려준다.

말 그대로 JPA에게 매핑할 객체임을 알려준다. 그래서 무조건 들어간다.(아마?)


@Table(name = "USERTABLE")//클래스이름과 테이블의 이름이 다른경우 Table로 따로 선언

클래스의 이름은 USER인데 

데이터베이스와 이름이 다른 경우에는 클래스의 이름을 변경하기보다

table을 선언해줘서 name을 설정 후

entity와 DB를 매핑해준다.

 

@NoArgsConstructor(access = AccessLevel.PROTECTED)//안전한 객체 생성을 위해서, 접근 제어

는 생성자를 만들어준다. 여기에서 PROTECTED까지 선언 해주면서

무분별하게 선언이 되지않도록 제어 하는 느낌이라고 한다.

이 부분은 구현해가면서 정확히 파악해야할 것같다.

 

@Getter
@ToString

기본 lombok에서 자주 보여지는 것.

@Data를 선언 안해준 이유는 아래의 @Builder를 보면 이해가 된다.

 

@SequenceGenerator(name = "User_Seq_Generator",sequenceName = "User_seq",initialValue = 1,allocationSize = 1)
//시퀀스 생성 식별자 생성기 이름, db에 등록될 시퀀스 이름, 시작하는 수, 증가하는 수

mysql의 경우에는 상관이 없지만

oracle에서는 시퀀스를 사용하는데 user_seq라는 시퀀스를 사용할겁니다 하고 알려주는 것이다.

 

@Id//Db기본키
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "User_Seq_Generator")//오라클의 경우 시퀀스로 지정 auto로 설정해도 됨.

id는 기본키이다 .

그리고 @GeneratedValue는 시퀀스를 사용한다는 것인데 oracle이므로 sequence라고 알려주교

generator로 이 시퀀스를 사용합니다 라고 선언 해준다.

 

@Column(nullable = false)

notnull이라고 알려주는 것이다.

만약 컬럼의 이름이 다른경우 name으로 테이블의 컬럼명을 적어주면 된다.

 

@Builder//특정한 경우에 사용되는 값들만 builder을 이용하여 setter생성
//setter만 사용할경우 목적을 알기 어렵다.또한, setter의 무분별한 사용보다 알기 쉬움.

흔히 @Data혹은 @Setter를 선언해주는데 이러한 경우보다

Bulider를 이용하여 특정 값만 setter 해주는 것이다. 

 

JPA가 알아야하는 기능이 많다고 해서음? 했는데 Entity부터 뭔가 많다...

'spring > JPA' 카테고리의 다른 글

Jpa로 게시물(1)  (0) 2021.05.25
JPA/Dto?Entity?  (0) 2021.05.22
JPARepository  (0) 2021.05.21