user 모델을 레파지토리에 연결해준다.
public interface UserRepository extends JpaRepository<User, Integer>{
}
서비스 부분에 레파지토리 생성자 주입시키고
서비스 부분은 전체적인 로직을 실행시키는 부분으로 회원가입이라는 메서드를 만들어주고
파라미터안에 들어갈 값은 엔티티가 아닌 dto를 파라미터로 넣어준다.
레파지토리와 엔티티는 데이터베이스와 직접적인 부분인데
컨트롤러와 서비스는 부분은 뷰페이지 직접적인 부분인데,
바로 연결을 해버리면 데이터베이스에 변경되어야하지말아야 할 부분도 변경될수도있기때문에
꼭 userDto를 생성해야한다. 데이터베이스의 캡슐화를위하고, jpa의 영속화를 끊기 위해
@Service
@RequiredArgsConstructor
public class UserService {
//생성자 주입
private final UserRepository userRepository;
@Transactional
//서비스 메서드생성=> 회원가입
public int join(UserDto userDto) {
try {
userRepository.save(userDto.toEntity());
return 100 ; // 리턴되는 값 json으로 값 넘겼을 때 보여지는 부분 user.js에 콘솔창 결과값나옴
}catch(Exception e) {
e.printStackTrace();
System.out.println("userservice " + e.getMessage());
}
return -100;
}
}
회원가입이 정상적으로 된다면 return 100, 그게아니면 -100 리턴이되게끔
다시 UserApiController로 가서 서비스부분을 넣으면 된다
@RestController
@RequiredArgsConstructor
public class UserApiController {
/*
@RequiredArgsConstructor붙이고 final 붙이면
@Autowired와 같은의미
*/
private final UserService userService;
//응답 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");
userDto.setRole(RoleType.USER);
int result = userService.join(userDto);
return new ResponseDto<Integer>(HttpStatus.OK.value(), result);
}
}
회원가입을하면 데이터베이스에 잘 들어가는걸 볼수 있음