- 연관관계 만들기
@ManyToOne

@OneToMany

@OneToOne

@ManyToMany

(강사님이 ManyToMany는 잘 사용하지 않는다고 하셨습니다.)

자세한 내용은 아래 주소에서 확인하시면 됩니다.

https://getinthere.tistory.com/23?category=884180 

 

스프링부트 with JPA 블로그 8강 - 테이블 생성하기

1. Blog 테이블 만들기 (User, Board, Reply) 2. 연관관계 만들기 @ManyToOne @OneToMany @OneToOne @ManyToMany ManyToMany는 사용하지 않는다. 그 이유는 서로의 primary key로만 중간 테이블을 생성해주는데,..

getinthere.tistory.com

 

 

package com.cos.blog.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cos.blog.model.RoleType;
import com.cos.blog.model.User;
import com.cos.blog.repository.UserRepository;

@RestController
public class DummyControllerTest {
	
	@Autowired // 의존성 주입(DI)
	private UserRepository userRepository;

	// http://localhost:8000/blog/dummy/join (요청)
	// http의 body에 username, password, email 데이터를 가지고 (요청)
	@PostMapping("/dummy/join")
//	public String join(String username, String password, String email) { // key=value (약속된 규칙)
	public String join(User user) { // key=value (약속된 규칙)
//		System.out.println("username: " + username);
//		System.out.println("password: " + password);
//		System.out.println("email: " + email);
		System.out.println("user: " + user);
		System.out.println("username: " + user.getUsername());
		System.out.println("password: " + user.getPassword());
		System.out.println("email: " + user.getEmail());
		
		user.setRole(RoleType.USER);
		userRepository.save(user);
		return "회원가입이 완료되었습니다.";
	}
}

DummyControllerTest를 만들고 join이라는 메서드를 만듭니다.

 

postman을 통해 호출시에 body에 x-www-form-urlencoded 방식으로 요청을 합니다.

이렇게 호출을 하면 join메서드에서 파라미터를 통해 받을 때 각 변수별 String으로 받을수도, User 객체를 통해 받을수도 있습니다.

 

package com.cos.blog.repository;

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

import com.cos.blog.model.User;

// DAO
// 자동으로 bean 등록이 된다.
// @Repository // 생략 가능한다.
public interface UserRepository extends JpaRepository<User, Integer> {

}

DB에 Insert하기 위해서는 위와같이 인터페이스를 만들어줘야합니다.

UserRepository 인터페이스에서 JpaRepository를 상속받고 Generic에 User, Integer를 적습니다.

이 말은 해당 JpaRepository는 User Table이 관리하는 Repository이며 Primary Key는 Integer임을 가리킵니다.

JpaRepository 안에는 findAll 등 여러 메소드들을 갖고 있습니다.

회원가입시에는 save를 쓸 예정입니다.

또한 해당 Repository는 자동으로 bean에 등록이 됩니다. 그렇기에 Repository 어노테이션 생략이 가능합니다.

 

DummyControllerTest로 돌아와 해당 Repository를 추가하고 Autowired 어노테이션을 추가합니다.

위에서 사용 된 Autowired 어노테이션은 UserRepository 타입으로 스프링이 관리하는 객체가 있다면 userRepository로 넣어 달라는 의미입니다.

// @autowired 작성 안하고 의존성 주입 방법

@RestController
@RequiredArgsConstructor
public class DummyControllerTest {
	private final UserRepository userRepository;
}

추가로 @RequiredArgsConstructor를 사용하면 final 객체에 대해 생성자를 자동생성하여 생성자 주입을 할 수 있습니다.

 

 

DynamicInsert 어노테이션 : DB insert 과정에서 null인 값에 대해서는 제외처리하는 어노테이션입니다.

<!-- @DynamicInsert 붙이기 전 -->
insert 
    into
        User
        (createDate, email, password, role, username) 
    values
        (?, ?, ?, ?, ?)

<!-- @DynamicInsert 붙인 후 -->
insert 
    into
        User
        (createDate, email, password, username) 
    values
        (?, ?, ?, ?)

 

Enum class 생성으로 넣고자 하는 값을 실수로 넣는 경우를 줄일 수 있습니다.

package com.cos.blog.model;

public enum RoleType {
	USER, ADMIN
}

Enum은 데이터의 도메인을 만들 때 사용합니다. 도메인이라함은 범위라 할 수 있습니다.

 

 

 

강의 주소 : https://youtu.be/w0hF91Xs--4

강의 주소 : https://youtu.be/FhrkWA9hioU

 

+ Recent posts