본문 바로가기

스프링 부트/웹MVC

User 생성 작업

반응형

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