Entity, DTO 클래스 생성
제약사항
- @Entity가 붙은 클래스는 반드시 기본 생성자를 가지고 있어야한다.
- 'public' 또는 'protected' 접근 수준을 가져야 한다.
- Entity클래스의 모든 필드는 JPA가 알아서 매핑하기 위해 직렬화가 가능(Serialicable) 해야 한다.
- @Entity 클래스는 상속 받거나 확장될 수 있고, 다른 Entity 클래스를 상속 받을 수 있다.
- Entity 클래스의 필드는 객체-관계 매핑(ORM)을 위해 다른 어노테이션들로 추가적으로 설정할 수 있다. (예: @Column, @Id, @OneToMany 등)
user클래스 생성후 엔티티 클래스로 설정해준다.
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Table(name="user_tb")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(length = 100, nullable = false, unique = true)
private String email;
@Column(length = 256, nullable = false)
private String password;
@Column(length = 45, nullable = false)
private String username;
@Column(length = 11, nullable = false)
private String phoneNumber;
@Column(length = 30)
@Convert(converter = StringArrayConverter.class)
private List<String> roles = new ArrayList<>();
@Builder
public User(int id, String email, String password, String username, String phoneNumber, List<String> roles) {
this.id = id;
this.email = email;
this.password = password;
this.username = username;
this.phoneNumber = phoneNumber;
this.roles = roles;
}
}
UserRequest 클래스 생성후 Join에 필요한 데이터만 가지고 있는 JoinDTO 내부클래스 생성한다.
public class UserRequest {
@Getter
@Setter
public static class JoinDTO {
@NotEmpty
@Pattern(regexp = "^[\\w._%+-]+@[\\w.-]+\\.[a-zA-Z]{2,6}$", message = "이메일 형식으로 작성해주세요")
private String email;
@NotEmpty
@Size(min = 8, max = 20, message = "8자 이상 20자 이내로 작성 가능합니다.")
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[@#$%^&+=!~`<>,./?;:'\"\\[\\]{}\\\\()|_-])\\S*$", message = "영문, 숫자, 특수문자가 포함되어야하고 공백이 포함될 수 없습니다.")
private String password;
@NotEmpty
private String username;
@NotEmpty
@Pattern(regexp = "^[0-9]{10,11}$", message = "휴대폰 번호는 숫자 10~11자리만 가능합니다.")
private String phoneNumber;
public User toEntity() {
return User.builder()
.email(email)
.password(password)
.username(username)
.phoneNumber(phoneNumber)
.roles(Collections.singletonList("ROLE_USER"))
.build();
}
}
}
UserRepository생성 해서 JpaRepository를 상속 받아준다
public interface UserRepository extends JpaRepository<User, Long> {
}