[Spring JPA ] - 회원가입기능구현 -3

JEONG SUJIN·2022년 11월 19일
0

스프링부트 JPA

목록 보기
4/24

디렉토리 구조

controller 디렉토리 구조안에 두개로 나눴다.

1.GetMapping
2.통신하고 실제 구현되는 Controller

| ㅡ src/main/java
│ ├─ controller
│    ├─ api
│       ├ UserApiController.java
│    ├ UserController.java
│ ├─ dto
│    ├ ResponseDto.java
│     ├ UserDto.java
│ ├─ handler
│ ├─ model
│    ├ User.java
│ ├─ repository
│    ├ UserRepository.java
│ ├─ service
│   ├ UserService.java

ajax를 만들었으니, 요청을 api/user로 하니까 컨트롤러를 만들어야함

UserController.java

@Controller
public class UserController {
	@GetMapping("/user/joinForm")
	public String joinForm() {
		return "/user/join";
	}
}

UserApiController.java

UserDto를 생성했던걸 User user 대신 Dto로 넣어줌

@RestController
public class UserApiController {

	//응답 Dto insert로, json타입으로 @RequestBody로 객체넣어주고,user는 강제로 넣어주고,

	//int타입으로 변수만들어서 서비스부분에 회원가입메서드안에 user파라미터 넣어주고,
	//실행이 잘되면dto결과값 보내준다. service단에 설정한
	//try, catch문으로 예외처리로 ! 성공처리가 되서 콘솔창에
	
	@PostMapping("api/user")
	public ResponseDto<Integer> save(@RequestBody UserDto userDto){
		//System.out.println("@@@@@ UserApiController");
		return new ResponseDto<Integer>(HttpStatus.OK.value(), 1); 
	
	}
	
}

응답할 때 사용하기 위해 Dto 생성

controller에 return 되면 응답하기 위한 dto

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder

//응답할 때 사용
public class ResponseDto<T> {
	int status;
	T data;
}

Entity파일

User.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity //user클래스가 자동으로 mysql 테이블 생성
public class User {
	
	@Id //primary key
	@GeneratedValue(strategy=GenerationType.IDENTITY) //넘버링 
	private int id; //오라클은 시퀀스,mysql은 auto-increment
	
	//유저네임이 null값이 되면 안되기때문에
	@Column(nullable= false, length=30)
	private String username;
	
	@Column(nullable= false, length=200) //비밀번호 암호화(해쉬)
	private String password;
	
	@Column(nullable= false, length=200)
	private String email;
	
	
	
	//@ColumnDefault("'user'")
	@Enumerated(EnumType.STRING)
	private RoleType role; //Enum을 쓰는게 좋다.
	//어떤회원가입을했을때 ADMIN, USER, manager 권한주기(도메인설정 , 도메인은 범위를  얘기하는거 , 성별은 남,여. 고등학교 1~3학년 이런식)
	
	@CreationTimestamp //시간이 자동 입력
	private Timestamp createDate;
	
	
}

enum.java

//데이터에  도메인을 만들때, 도메인은 범위를 정할 때 
public enum RoleType {
 USER,ADMIN
}

User.java(entity)로 바로 접근못하게 UserDto를 생성

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserDto {

	private int id; // 오라클은 시퀀스,mysql은 auto-increment
	private String username;
	private String password;
	private String email;

	@Enumerated(EnumType.STRING)
	private RoleType role; // Enum을 쓰는게 좋다.

	private Timestamp createDate;

	

	//@Builder
	public UserDto(int id, String username, String password, String email,RoleType role, Timestamp createDate) {
		this.id=id;
	    this.username=username;
	    this.password=password;
	    this.email=email;
        this.role= role;
	    this.createDate=createDate;
	}
	
	
	//toEntity()메서드를 통해 Service > Database(Entity)로 Data를 전달할 때 Dto를 통해서 전달
	public  User toEntity() {
		User user = User.builder()
				.id(id)
				.username(username)
				.password(password)
				.email(email)
				.createDate(createDate)
                .role(role)
				.build();
		return user;
	}
}
profile
기록하기

0개의 댓글