회원가입은 username, password, email 세 개의 데이터 값으로 가입이 가능하도록
- 테스트하기 DummyControllerTest 클래스 생성
함수의 파라미터로 전송 받는법
** http://localhost:8000/dummy/join
@RestController //데이터 리턴
public class DummyControllerTest {
@PostMapping("/dummy/join")
public String join(String username,String password,String email ) {
System.out.println("username : "+username);
System.out.println("password : "+password);
System.out.println("email : "+email);
return "회원가입이 완료되었습니다.";
}
}
- postman
x-www-form-unlencoded 의 마입타입은 html에서 form태그로 데이터를 전송할때 key=value 값으로 전송한다.
두가지라면 key=value&key=value
x-www-form-unlencoded로 전송되는 데이터는 key=value 형태로 전송되고
public String join(String username,String password, String email) 함수의 파라미터로 변수에 파싱해서 넣어줌.
객체로 받을경우
@RestController //데이터 리턴
public class DummyControllerTest {
@PostMapping("/dummy/join")
public String join(User user) { // key=value (약속된 규칙)
System.out.println("id : "+user.getId());
System.out.println("username : "+user.getUsername());
System.out.println("password : "+user.getPassword());
System.out.println("email : "+user.getEmail());
System.out.println("role : "+user.getRole());
System.out.println("createDate : "+user.getCreateDate());
return "회원가입이 완료되었습니다.";
}
}
[User]
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity // User 클래스가 MySQL에 테이블이 생성이 된다.
// @DynamicInsert // insert시에 null인 필드를 제외시켜준다.
public class User {
@Id //Primary key
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; // 시퀀스, auto_increment
@Column(nullable = false, length = 100, unique = true)
private String username; // 아이디
@Column(nullable = false, length = 100) // 123456 => 해쉬 (비밀번호 암호화)
private String password;
@Column(nullable = false, length = 50)
private String email;
@ColumnDefault("user")
private RoleType role;
@CreationTimestamp
private Timestamp createDate;
}
id는 int값 디플트값이고 password,role ,createDate는 값을 못받는다.
이제 회원가입 할때 DB에 insert하려면
1. repository 패키지 만들기 (com.cos.blog.repository)
2. repository 안에 인터페이스 UserRepository 만들고 extends JpaRepository<User, Integer>
[UserRepository ]
public interface UserRepository extends JpaRepository<User, Integer>{
}
JpaRepository<User, Integer> : JpaRepository 는 User 테이블을 관리하고 User의 pk는 Integer이다.
[ DummyControllerTest ]
@Autowired 어노테이션은DummyControllerTest 가 메모리에 뜰때 UserRepository도 같이 메모리에 뜨도록 한다.
= 이것이 의존성 주입.
추가하기
@Autowired // 의존성 주입(DI) private UserRepository userRepository;
@RestController //데이터 리턴
public class DummyControllerTest {
@Autowired // 의존성 주입(DI)
private UserRepository userRepository;
@PostMapping("/dummy/join")
public String join(User user) { // key=value (약속된 규칙)
System.out.println("id : "+user.getId());
System.out.println("username : "+user.getUsername());
System.out.println("password : "+user.getPassword());
System.out.println("email : "+user.getEmail());
System.out.println("role : "+user.getRole());
System.out.println("createDate : "+user.getCreateDate());
userRepository.save(user);
return "회원가입이 완료되었습니다.";
}
}
userRepository.save(user); DB에 저장
postman 에 send 후 DB에 들어간것을 확인할 수 있다.
* @CreationTimestamp 어노테이션은 자바가 현재시간을 넣어 insert해줬음.
role값이 안들어간 이유는 디폴트 값 때문!
@ColumnDefault("'user'")
private String role
디폴트값이 들어가려면 쿼리에 role이 없어야 디폴트값이 들어간다.
insert into User (createDate, email, password, username)
values (?, ?, ?, ?)
만약 쿼리에 role 을 넣었다면? 디폴트값이 적용이 안되고 null이 들어가버림..
insert into User (createDate, email, password, role, username)
values (?, ?, ?, ?, ?)
User 클래스에 @DynamicInsert 를 붙여주면 insert할때 null 인 필드 제외해준다.
▶ role 이 null이니까 role을 제외하고 디폴트값을 적용시켜 insert해준다.
User 클래스에 @DynamicInsert 붙여줘서 role 값에 디폴트값 적용됐음.
하지만 @DynamicInsert 어노테이션을 붙이면 붙일게 많아져서 딱히 좋은 방법은 아니다..
@DynamicInsert 대신 enum 사용하기
Enum 만드는 방법
[RoleType] Enum 생성하기
public enum RoleType {
USER, ADMIN
}
RoleType enum 클래스를 따로 만들어서 내가 넣는 값만 (USER, ADMIN) 쓸 수 있도록 강제할 수 있음.
users 를 쓰는 실수를 할일이 없다.
대체로 데이터 도메인을 만들 때 쓴다 (도메인은 범위) 어떤 범위 안에 데이터를 넣어서
(남/녀) 를 (남자/여자) 로 쓰는 실수를 하지 않는 장점이 있다!
[User]
@Enumerated(EnumType.STRING)
private RoleType role; //ADMIN, USER 두 개밖에 못넣도록
- EnumType.STRING : DB에는 RoleType 이라는게 없어서 해당 enum이 String이라고 알려줌
@RestController //데이터 리턴
public class DummyControllerTest {
@Autowired // 의존성 주입(DI)
private UserRepository userRepository;
@PostMapping("/dummy/join")
public String join(User user) { // key=value (약속된 규칙)
System.out.println("id : "+user.getId());
System.out.println("username : "+user.getUsername());
System.out.println("password : "+user.getPassword());
System.out.println("email : "+user.getEmail());
System.out.println("role : "+user.getRole());
System.out.println("createDate : "+user.getCreateDate());
user.setRole(RoleType.USER);
userRepository.save(user);
return "회원가입이 완료되었습니다.";
}
}
user.setRole(RoleType.USER); : RoleType Enum클래스에서 USER 을 DB에 저장
userRepository.save(user); DB에 저장
'Spring boot | 블로그 만들기' 카테고리의 다른 글
회원삭제 테스트 | Exception 처리 (0) | 2022.11.05 |
---|---|
회원수정 테스트 | save()와 @Transactional 더티체킹 (1) | 2022.11.05 |
테이블 만들기 User, Board, Reply (0) | 2022.11.03 |
MySQL 설정, DB와 프로젝트 연결 (1) | 2022.10.31 |
패키지 생성법, 의존성 설정, 제어의 역전(Ioc)이란 (0) | 2022.10.31 |