Christmas Pikachu Spring Boot 회원가입 샘플 기능 만들어보기
개발일지/스프링

Spring Boot 회원가입 샘플 기능 만들어보기

ZI_CO 2022. 12. 8.

ORM 연관 관계 만들기

@ManyToOne
@OneToMany
@OneToOne
@ManyToMany
@DynamicInsert null 인 값은 필드에서 제외

 

 

package com.tencoding.blog.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.tencoding.blog.dto.User;
import com.tencoding.blog.model.RoleType;
import com.tencoding.blog.repository.UserRepository;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@RestController
@RequestMapping("/dummy")
public class DummyControllerTest {

	@Autowired // 순환 참조 조심 !!!
	private UserRepository userRepository;

	@GetMapping("/user/{id}")
	public User detail(@PathVariable int id) {

//		User user = userRepository.findById(id).orElseGet(() -> { // 해당하는 유저정보가 없으면 예외를 던져주지 않는다.
//			// 커스텀 한 데이터
//			return new User();
//		});

		User user = userRepository.findById(id).orElseThrow(() -> { // 해당하는 유정보가 없으면 예외를 던져준다.
			return new IllegalArgumentException("해당 유저정보는 없습니다.");
		});

		return user;
	}

	// http://localhost:9090/blog/dummy/signup
	@PostMapping("/signup")
	public String signUp(@RequestBody User user) {
		log.info(">>>> User : {}", user);

		user.setRole(RoleType.USER);
		userRepository.save(user);

		return "회원가입이 완료되었습니다.";
	}
}

 

 

 

 

 

package com.tencoding.blog.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.tencoding.blog.dto.User;
// DAO
// 여기서는 굳이 Bean 으로 등록 요청을 하지 않아도 등록 시켜준다. --> jpaRepository
public interface UserRepository extends JpaRepository<User, Integer>{ // 테이블명 , pk데이터타입

}

 

 

 

 

package com.tencoding.blog.model;

public enum RoleType {
	USER,ADMIN
}

 

 

 

 

package com.tencoding.blog.dto;

import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.DynamicInsert;

import com.tencoding.blog.model.RoleType;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

// 1. mysql server 실행
// 2. 테이블 생성
// 3. 제약 추가
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
// @DynamicInsert //null 필드가 들어 올때 무시하라 --> 디폴트값 선언하면 적용됨
public class User {
	@Id // Primary key PK로 지정한다.
	@GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 DB 넘버링 전략을 따라간다.(오토인크리먼트 적용)
	private int id;
	
	@Column(nullable = false, length = 30)
	private String username;
	
	@Column(nullable = false, length = 100)
	private String password;
	
	@Column(nullable = false, length = 50)
	private String email;
	
	//@ColumnDefault("'user'")// 문자라는 것을 알려주어야 한다. --> ('')
	@Enumerated(EnumType.STRING) // DB에게 String타입이라고 알려 줘야 한다.
	private RoleType role; // Enum 변경
	
	@CreationTimestamp // 시간이 자동으로 입력된다.
	private Timestamp createDate;
	
}

'개발일지 > 스프링' 카테고리의 다른 글

스프링 RestTemplate  (0) 2022.12.15
JPA 네이밍전략, 네이티브 쿼리 사용하기  (0) 2022.12.12
yml 설정하기 - 2  (0) 2022.12.08
Xml, Json, Yaml 차이점  (0) 2022.12.08
Spring Boot - interceptor  (0) 2022.12.08

댓글