반응형
http://localhost:8080/user 주소로 userId, password, userName을 보내서 db에 생성되도록 하기 위한 작업으로
DTO 생성
UserSaveRequestDto.java
package com.cos.web01.service.domain.dto;
import com.cos.web01.service.domain.user.User;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class UserSaveRequestDto {
private String userId;
private String password;
private String userName;
public User toEntity() {
return User.builder().userId(userId).password(password).userName(userName).build();
}
}
controller에 saveUser.java 추가
package com.cos.web01.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.cos.web01.service.domain.dto.UserSaveRequestDto;
import com.cos.web01.service.domain.user.UserRepository;
@RestController
public class WebRestController {
@Autowired
private UserRepository userRepository;
@GetMapping({ "", "/" })
public String index() {
return "hello";
}
@PostMapping("/user")
public void saveUser(@RequestBody UserSaveRequestDto dto) {
userRepository.save(dto.toEntity());
}
}
DB에 데이터가 생성될 때, 날짜가 기록되어지도록 BaseTimeEntity.java 추가
package com.cos.web01.service.domain;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import lombok.Getter;
// @MappedSuperclass
// 여러 엔티티에서 가져가야할 필요가 있을 때, 코드 중복을 줄이기 위해
// 공통으로 쓰이는 칼럼을 만들어서 추승 클래스에 정의하고,
// 이것을 사용할 엔티티에서는 이것을 상속받아 사용하면 됨
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class) // 자동으로 시간 매핑해주는 기능을 포함시킴
public abstract class BaseTimeEntity {
@CreatedDate // 엔티티가 생성되어 저장될때 시간이 자동 저장
private LocalDateTime createdDate;
@LastModifiedDate // 엔티티의 값이 변경될 때 시간이 자동 저장
private LocalDateTime updatedDate;
}
User.java에 BaseTimeEntity 상속 추가
package com.cos.web01.service.domain.user;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import com.cos.web01.service.domain.BaseTimeEntity;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본 생성자 생성 방지
@Data
@Entity
public class User extends BaseTimeEntity {
@Id // primary key
@GeneratedValue(strategy = GenerationType.IDENTITY) // 값 생성이 데이터베이스 설정을 따라감, mysql을 쓰고 있으므로 auto_increment로 됨
private Long id;
@Column(length = 20, unique = true, nullable = false)
private String userId;
@Column(length = 50, unique = true, nullable = false)
private String password;
private String userName;
@Builder
public User(String userId, String password, String userName) {
this.userId = userId;
this.password = password;
this.userName = userName;
}
}
스프링 부트 프로젝트 생성시 만들어지는 Application.java 파일에 어노테이션을 추가해주어야한다
package com.cos.web01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@EnableJpaAuditing // JPA Auditing 활성화
@SpringBootApplication
public class Web01Application {
public static void main(String[] args) {
SpringApplication.run(Web01Application.class, args);
}
}
포스트맨으로 데이터 전달하고 확인, method는 post, url은 http://localhost:8080/user
반응형
'스프링 부트 > 웹MVC' 카테고리의 다른 글
글 등록, 글 목록 불러오기, 해당 글의 상세 페이지로 이동하기 (0) | 2021.12.09 |
---|---|
업데이트, 더티 체킹 (0) | 2021.12.03 |
스프링 시큐리티 적용 (0) | 2021.12.03 |
thymeleaf 적용 (0) | 2021.12.01 |
셋업 (0) | 2021.12.01 |