[Spring Boot] 7. Spring Boot Project (Bank v1)_3-4.Fuctions Design_Account List
Mar 27, 2025
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>
list
{{>layout/header}}
<!--마진 : mt,mr,ml,mb (1~5) ex) mt-5-->
<div class="container mt-2">
<table class="table table-hover">
<thead>
<tr>
<th>계좌번호</th>
<th>잔액</th>
</tr>
</thead>
<tbody>
{{#models}}
<tr>
<td>{{number}}</td>
<td>{{balance}}원</td>
</tr>
{{/models}}
</tbody>
</table>
</div>
{{>layout/footer}}
AccountController
package com.metacoding.bankv1.account;
import com.metacoding.bankv1.user.User;
import jakarta.servlet.http.HttpServletRequest;
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;
import java.util.List;
@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/";
}
@GetMapping("/account")
public String list(HttpServletRequest request) {
// 인증체크 (반복되는 공통부가로직)
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) throw new RuntimeException("로그인 후 사용해주세요");
List<Account> accountList = accountService.나의계좌목록(sessionUser.getId());
request.setAttribute("models", accountList);
return "account/list";
}
}
AccountService
package com.metacoding.bankv1.account;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@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);
}
public List<Account> 나의계좌목록(Integer userId) {
return accountRepository.findAllByUserId(userId);
}
}
AccountRepository
package com.metacoding.bankv1.account;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@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();
}
public List<Account> findAllByUserId(Integer userId) {
Query query = em.createNativeQuery("select * from account_tb where user_id = ? order by created_at desc", Account.class);
query.setParameter(1, userId);
return query.getResultList();
}
}
username: ssar


username: cos


Share article