- 연관관계 만들기
@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
'프레임워크 > Spring, Spring Boot' 카테고리의 다른 글
[메타코딩] 스프링부트 강좌 27강(블로그 프로젝트) - 전체 select 및 paging 테스트 (1) | 2022.07.28 |
---|---|
[메타코딩] 스프링부트 강좌 26강(블로그 프로젝트) - id로 select 테스트 (1) | 2022.07.28 |
[메타코딩] 스프링부트 강좌 23강(블로그 프로젝트) - JSON 사용법 (1) | 2022.07.27 |
[메타코딩] 스프링부트 강좌 22강(블로그 프로젝트) - 연관관계의 주인 (1) | 2022.07.27 |
[메타코딩] 스프링부트 강좌 21강(블로그 프로젝트) - Reply 테이블 생성 (0) | 2022.07.27 |