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){}
데이터를 잘 받는지 확인하기


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

@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