이전 게시글에서
https://changha-dev.tistory.com/146
웹페이지에서 입력한 정보를 Controller에 가져오는 것까지 해봤습니다.
이번에는 가져온 정보를 DB에 저장하는 것을 해보겠습니다.
(MySQL WorkBench 설치 및 사용방법은 생략)
스프링 MVC패턴을 기반으로 하여
1. Service 로 DTO 전달
2. Service
먼저 dto, entity, repository, service 이렇게 package를 생성하고 각각 class도 만들어 주겠습니다.
package com.example.member.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
//lombok dependency추가
@Getter
@Setter
@NoArgsConstructor
@ToString
public class MemberDTO { //회원 정보를 필드로 정의
private Long id;
private String memberEmail;
private String memberPassword;
private String memberName;
//lombok 어노테이션으로 getter,setter,생성자,toString 메서드 생략 가능
public static MemberDTO toMemberDTO(MemberEntity memberEntity){
MemberDTO memberDTO = new MemberDTO();
memberDTO.setId(memberEntity.getId());
memberDTO.setMemberEmail(memberEntity.getMemberEmail());
memberDTO.setMemberName(memberEntity.getMemberName());
memberDTO.setMemberPassword(memberEntity.getMemberPassword());
return memberDTO;
}
}
//MemberDTO.class
DTO란 : 데이터 전송 객체(Data Transfer Object), 프로세스 간에 데이터를 전달하는 객체 => Client <-> Controller 사이, Controller <-> Service 사이 처럼 단순히 데이터 전달 목적.
@Controller
@RequiredArgsConstructor //MemberService에 대한 멤버를 사용 가능
public class MemberController {
// 생성자 주입
private final MemberService memberService;
// 회원가입 페이지 출력 요청
@GetMapping("/member/save")
public String saveForm() {
return "save";
}
@PostMapping("/member/save") // name값을 requestparam에 담아온다
public String save(@ModelAttribute MemberDTO memberDTO) {
System.out.println("MemberController.save");
System.out.println("memberDTO = " + memberDTO);
memberService.save(memberDTO);
return "index";
}
}
//MemberController.class
save 메서드의 파라미터를 위와 같이 memberDTO로 교체합니다.
memberService에 memberDTO 를 전달합니다.
@Service //스프링이 관리해주는 객체 == 스프링 빈
@RequiredArgsConstructor //controller와 같이. final 멤버변수 생성자 만드는 역할
public class MemberService {
private final MemberRepository memberRepository; // 먼저 jpa, mysql dependency 추가
public void save(MemberDTO memberDTO) {
// repsitory의 save 메서드 호출
MemberEntity memberEntity = MemberEntity.toMemberEntity(memberDTO);
memberRepository.save(memberEntity);
//Repository의 save메서드 호출 (조건. entity객체를 넘겨줘야 함)
}
}
//MemberService.class
위와 같이 적으면 아직 빨간글이 뜨는 부분이 많을 텐데
아래에서 하나씩 해결하겠습니다.
흐름을 정리하면
Client(웹페이지) ->
Controller에서 DTO로 받은 후 Service로 전달 ->
Service에서 받은 후 Entity로 바꿔 Repository로 전달
이제 JPA, MySQL dependency를 추가하겠습니다.
이후 resoucres 패키지 안에 application.yml 파일을 추가해서 환경세팅 하겠습니다.
# database 연동 설정
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 각자 PC에 만들어놓은 Database이름을 써야 합니다.
url: jdbc:mysql://127.0.0.1:3306/db # Database이름 ?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
# mysql에 생성한 사용자 계정 정보를 써야 합니다.
username: root
password: # 자신의 mysql 비밀번호
thymeleaf:
cache: false
# spring data jpa 설정
jpa:
database-platform: org.hibernate.dialect.MySQL57Dialect
open-in-view: false
show-sql: true
hibernate:
ddl-auto: update
MemberService에 있던 MemberEntity 클래스를 entity 패키지 안에 만들어 주겠습니다.
@Entity
@Setter
@Getter
@Table(name = "member_table") //database에 해당 이름의 테이블 생성
public class MemberEntity { //table 역할
//jpa ==> database를 객체처럼 사용 가능
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment
private Long id;
@Column(unique = true)
private String memberEmail;
@Column
private String memberPassword;
@Column
private String memberName;
public static MemberEntity toMemberEntity(MemberDTO memberDTO){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setId(memberDTO.getId());
memberEntity.setMemberEmail(memberDTO.getMemberEmail());
memberEntity.setMemberName(memberDTO.getMemberName());
memberEntity.setMemberPassword(memberDTO.getMemberPassword());
return memberEntity;
}
}
//MemberEntity.class
@Repository / 첫번째 인자 : 어떤 Entity인지, 두번째 인자 : pk 어떤 타입인지
public interface MemberRepository extends JpaRepository<MemberEntity, Long>
{
}
//MemberRepository.interface
이제 모든 과정을 완료했으니 실행 해보겠습니다.
이상으로 DB연동을 통해 Client에서 DB까지 데이터 저장하는 방법을 알아 보았습니다.
'개발' 카테고리의 다른 글
[Spring Boot] 스프링 부트 회원 목록 출력하기 (0) | 2023.02.11 |
---|---|
[Spring Boot] 스프링 부트 로그인 구현 (0) | 2023.02.11 |
[Spring Boot ] 웹페이지 정보 -> Controller (http method) (0) | 2023.02.09 |
[Spring Boot] 스프링부트 환경세팅 후 웹페이지 실행 (0) | 2023.02.09 |
[안드로이드] Retrofit 연결하기 (0) | 2021.05.30 |