[spring blog]2. User Entity 생성, 회원 가입

Mar 15, 2024
[spring blog]2. User Entity 생성, 회원 가입
 
User 생성하기
테이블 생성 시 자바 객체로 만들고 싶을 때 @Entity를 사용한다.
User
package shop.mtcoding.blog.user; import jakarta.persistence.*; import lombok.Data; import java.time.LocalDateTime; // user로 테이블명을 만들면, 키워드여서 안만들어질 수 있다. _tb 컨벤션 지키자. @Table(name="user_tb") @Data @Entity public class User { @Id // PK 설정 @GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment 전략 private int id; private String username; private String password; private String email; // 카멜 표기법으로 만들면 DB는 created_at 으로 만들어진다. (언더스코어 기법) private LocalDateTime createdAt; }
 
 
html파일 확인하기
joinForm.mustache
{{> layout/header}} <div class="container p-5"> <div class="card"> <div class="card-header"><b>회원가입을 해주세요</b></div> <div class="card-body"> <form action="/join" method="post" enctype="application/x-www-form-urlencoded"> /join 식별자요청, db변경하기때문에 post요청 xform <div class="mb-3"> <input type="text" class="form-control" placeholder="Enter username" name="username"> // name 뒤 유저네임 </div> <div class="mb-3"> <input type="password" class="form-control" placeholder="Enter password" name="password"> // name 뒤 비밀번호 </div> <div class="mb-3"> <input type="email" class="form-control" placeholder="Enter email" name="email"> // name 뒤 이메일 </div> <button type="submit" class="btn btn-primary form-control">회원가입</button> </form> </div> </div> </div> {{> layout/footer}}
 
리다이렉트
회원가입후 → 로그인폼으로
UserController
@Controller public class UserController { @PostMapping("/join") public String join() { return "redirect:/loginForm"; }
 
RequestDTO 만들기
 
UserRequest
package shop.mtcoding.blog.user; import lombok.Data; public class UserRequest { @Data public static class JoinDTO { private String username; private String password; private String email; } }
UserController
@PostMapping("/join") public String join(UserRequest.JoinDTO requestDTO) { System.out.println(requestDTO); return "redirect:/loginForm"; }
 
정보 받는법 세가지
String username = request.getParameter("username");
join(String username){}
join(DTO){}
 
데이터를 잘 받는지 확인하기
notion image
 
notion image
 
UserRepository 만들기
package shop.mtcoding.blog.user; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @Repository // IoC에 new하는 방법 public class UserRepository { // DB에 접근할 수 있는 매니저 객체 // 스프링이 만들어서 IoC에 넣어둔다. // DI에서 꺼내 쓰기만 하면된다. private EntityManager em; // 생성자 주입 (DI 코드) public UserRepository(EntityManager em) { this.em = em; } @Transactional // db에 write 할때는 필수 public void save(UserRequest.JoinDTO requestDTO){ Query query = em.createNativeQuery("insert into user_tb(username, password, email, created_at) values(?,?,?, now())"); query.setParameter(1, requestDTO.getUsername()); query.setParameter(2, requestDTO.getPassword()); query.setParameter(3, requestDTO.getEmail()); query.executeUpdate(); } }
 
 
UserController
notion image
💡
@RequiredArgsConstructor // final이 붙었을 때 생성자를 만들어줌
 
save함수 호출하기
@PostMapping("/join") public String join(UserRequest.JoinDTO requestDTO) { System.out.println(requestDTO); userRepository.save(requestDTO); return "redirect:/loginForm"; }
userRepository.save(requestDTO); : 모델에 위임
Share article

Essential IT