[Spring Boot] 7. Spring Boot Project (Bank v1)_3-3.Fuctions Design_Create account

김미숙's avatar
Mar 27, 2025
[Spring Boot] 7. Spring Boot Project (Bank v1)_3-3.Fuctions Design_Create account

header

<!DOCTYPE html> <html lang="en"> <head> <title>Bank</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> </head> <body> <nav class="navbar navbar-expand-sm bg-dark navbar-dark"> <div class="container-fluid"> <a class="navbar-brand" href="/">Home</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> {{#sessionUser}} <li class="nav-item"> <a class="nav-link" href="/account">계좌목록</a> </li> <li class="nav-item"> <a class="nav-link" href="/account/save-form">계좌생성</a> </li> <li class="nav-item"> <a class="nav-link" href="#">이체하기</a> </li> <li class="nav-item"> <a class="nav-link" href="/logout">로그아웃</a> </li> {{/sessionUser}} {{^sessionUser}} <li class="nav-item"> <a class="nav-link" href="/join-form">회원가입</a> </li> <li class="nav-item"> <a class="nav-link" href="/login-form">로그인</a> </li> {{/sessionUser}} </ul> </div> </div> </nav>

AccountRequest

package com.metacoding.bankv1.account; import lombok.Data; public class AccountRequest { @Data public static class SaveDTO { private Integer number; private String password; private Integer balance; } }

AccountController

package com.metacoding.bankv1.account; import com.metacoding.bankv1.user.User; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @RequiredArgsConstructor @Controller public class AccountController { private final AccountService accountService; private final HttpSession session; @GetMapping("/") public String home() { return "home"; } @GetMapping("/account/save-form") public String saveForm() { // 인증체크 (반복되는 공통부가로직) User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null) throw new RuntimeException("로그인 후 사용해주세요"); return "account/save-form"; } @PostMapping("/account/save") public String save(AccountRequest.SaveDTO saveDTO) { // 인증체크 (반복되는 공통부가로직) User sessionUser = (User) session.getAttribute("sessionUser"); if (sessionUser == null) throw new RuntimeException("로그인 후 사용해주세요"); accountService.계좌생성(saveDTO, sessionUser.getId()); return "redirect:/account"; } }

AccountService

package com.metacoding.bankv1.account; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @RequiredArgsConstructor @Service public class AccountService { private final AccountRepository accountRepository; @Transactional public void 계좌생성(AccountRequest.SaveDTO saveDTO, int userId) { accountRepository.save(saveDTO.getNumber(), saveDTO.getPassword(), saveDTO.getBalance(), userId); } }

AccountRepository

package com.metacoding.bankv1.account; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @RequiredArgsConstructor @Repository public class AccountRepository { private final EntityManager em; public void save(Integer number, String password, Integer balance, int userId) { Query query = em.createNativeQuery("insert into account_tb(number,password,balance,user_id,created_at) values(?,?,?,?,now())"); query.setParameter(1, number); query.setParameter(2, password); query.setParameter(3, balance); query.setParameter(4, userId); query.executeUpdate(); } }
 
notion image
notion image
notion image
Share article

parangdajavous