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 |