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 |
댓글