티스토리 뷰
프로젝트를 위해 동호회 야구구단을 관리하는 프로그램을 작성했다.
구단을 등록하고 목록을 확인하고 특정 구단을 상세보기 그리고 수정 및 삭제 기능을 구현했다.
Domain
Team.java
package com.springmvc.domain;
import java.io.Serializable;
import org.springframework.web.multipart.MultipartFile;
public class Team implements Serializable{
private static final long serialVersionUID = 6572089685558342850L;
private String teamId; //팀아이디
private String teamName; //구단명
private int memberNumber; //인원수
private String phoneNumber; //대표자번호
private String leaderName; //대표자이름
private String prefArea; //선호지역
private MultipartFile teamImage;
private String fileName;
public Team() {
super();
// TODO Auto-generated constructor stub
}
public String getTeamId() {
return teamId;
}
public void setTeamId(String teamId) {
this.teamId = teamId;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public int getMemberNumber() {
return memberNumber;
}
public void setMemberNumber(int memberNumber) {
this.memberNumber = memberNumber;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getLeaderName() {
return leaderName;
}
public void setLeaderName(String leaderName) {
this.leaderName = leaderName;
}
public String getPrefArea() {
return prefArea;
}
public void setPrefArea(String prefArea) {
this.prefArea = prefArea;
}
public MultipartFile getTeamImage() {
return teamImage;
}
public void setTeamImage(MultipartFile teamImage) {
this.teamImage = teamImage;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
Controller
TeamController.java
package com.springmvc.controller;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.springmvc.domain.Team;
import com.springmvc.service.TeamService;
@Controller
@RequestMapping("/team")
public class TeamController {
@Autowired
private TeamService teamService;
//read
@GetMapping
public String requestTeamList(Model model) {
List<Team> list = teamService.readAllTeamList();
model.addAttribute("teamList",list);
return "teams";
} //전체목록 보기
@GetMapping("/all")
public String requestTeamById(@RequestParam("id")String teamId, Model model) {
List<Team> list = teamService.readAllTeamList();
model.addAttribute("teamList",list);
return "teams";
}
@GetMapping("/team")
public String requestTemaById(@RequestParam("id") String teamId, Model model) {
Team teamById = teamService.readTeamById(teamId);
model.addAttribute("tb",teamById);
return "team";
}
//create
@GetMapping("/add")
public String requestAddTeamForm(@ModelAttribute("addTeam")Team team) {
System.out.println("/add GetMapping");
return "add"; //addTeam
}
@PostMapping("/add")
public String submitAddNewTeam(@ModelAttribute("addTeam")Team team, HttpServletRequest request) {
MultipartFile img = team.getTeamImage();
String saveName = img.getOriginalFilename();
String save = request.getSession().getServletContext().getRealPath("/resources/images");
File saveFile = new File(save,saveName);
if(img !=null&& !img.isEmpty())
{
try
{
img.transferTo(saveFile);
team.setFileName(saveName);
}
catch (Exception e)
{
throw new RuntimeException("구단 이미지 업로드가 실패하였습니다.");
}
}
System.out.println("PostMapping 도착");
System.out.println("id : "+team.getTeamId());
System.out.println("name : "+team.getTeamName());
teamService.setNewTeam(team);
return "redirect:/teams";
}
@GetMapping("/update")
public String getUpdateTeamForm(@ModelAttribute("updateTeam") Team team, @RequestParam("id") String teamId, Model model) {
Team teamById = teamService.readTeamById(teamId);
model.addAttribute("team", teamById);
System.out.println("GetMapping(update)도착");
return "updateForm";
}
@PostMapping("/update")
public String submitUpdateTeamForm(@ModelAttribute("updateTeam") Team team, HttpServletRequest request) {
MultipartFile img = team.getTeamImage();
String saveName = img.getOriginalFilename();
String save = request.getSession().getServletContext().getRealPath("/resources/images");
File saveFile = new File(save,saveName);
if(img != null && !img.isEmpty()) {
try {
img.transferTo(saveFile);
team.setFileName(saveName);
}
catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException("팀 이미지 업로드가 실패하였습니다.");
}
}
teamService.setUpdateTeam(team);
return "redirect:/teams";
}
@GetMapping(value="/delete")
public String getDeleteTeamForm(Model model, @RequestParam("id") String teamId) {
teamService.setDeleteTeam(teamId);
return "redirect:/teams";
}
}
Service
TeamService.java
package com.springmvc.service;
import java.util.List;
import com.springmvc.domain.Team;
public interface TeamService {
List<Team> readAllTeamList();
List<Team> readTeamListByCategory(String category);
Team readTeamById(String teamId);
void setNewTeam(Team team);
void setUpdateTeam(Team team);
void setDeleteTeam(String teamId);
}
TeamServiceImpl.java
package com.springmvc.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springmvc.domain.Team;
import com.springmvc.repository.TeamRepository;
@Service
public class TeamServiceImpl implements TeamService{
@Autowired
private TeamRepository teamRepository;
@Override
public List<Team> readAllTeamList() {
// TODO Auto-generated method stub
return teamRepository.readAllTeamList();
}
@Override
public List<Team> readTeamListByCategory(String prefArea) {
List<Team> teamsByArea = teamRepository.readTeamListByArea(prefArea);
return teamsByArea;
}
@Override
public Team readTeamById(String teamId) {
Team teamById = teamRepository.readTeamById(teamId);
return teamById;
}
@Override
public void setNewTeam(Team team) {
teamRepository.setNewTeam(team);
}
@Override
public void setUpdateTeam(Team team) {
teamRepository.setUpdateTeam(team);
}
@Override
public void setDeleteTeam(String teamId) {
teamRepository.setDeleteTeam(teamId);
}
}
Repository
TeamRepository.java
package com.springmvc.repository;
import java.util.List;
import com.springmvc.domain.Team;
public interface TeamRepository {
List<Team> readAllTeamList();
List<Team> readTeamListByArea(String prefArea);
Team readTeamById(String teamId);
void setNewTeam(Team team);
void setUpdateTeam(Team team);
void setDeleteTeam(String teamId);
}
TeamRepositoryImpl.java
package com.springmvc.repository;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.springmvc.domain.Team;
@Repository
public class TeamRepositoryImpl implements TeamRepository{
private JdbcTemplate template;
@Autowired
public void setJdbcTemplate(DataSource dataSource) {
this.template = new JdbcTemplate(dataSource);
}
public void setTemplate(JdbcTemplate template) {
this.template = template;
}
@Override
public List<Team> readAllTeamList() {
String SQL = "SELECT * FROM team";
List<Team> listOfTeams = template.query(SQL, new TeamRowMapper());
return listOfTeams;
}
@Override
public List<Team> readTeamListByArea(String prefArea) {
List<Team> teamsByArea = new ArrayList<Team>();
String SQL = "SELECT * FROM team where t_place LIKE '%"+prefArea+"%'";
teamsByArea = template.query(SQL, new TeamRowMapper());
return teamsByArea;
}
@Override
public Team readTeamById(String teamId) {
Team teamInfo = null;
String SQL = "SELECT COUNT(*) FROM TEAM WHERE t_id=?";
int rowCount = template.queryForObject(SQL, Integer.class, teamId);
if(rowCount!=0) {
SQL = "SELECT * FROM team WHERE t_id=?";
teamInfo = template.queryForObject(SQL, new Object[] {teamId}, new TeamRowMapper());
}
if(teamInfo==null) {
throw new IllegalArgumentException("구단 ID가 "+teamId+"인 구단을 찾을 수 없습니다.");
}
return teamInfo;
}
@Override
public void setNewTeam(Team team) {
String SQL = "INSERT INTO team (t_id, t_name, t_people, t_number, t_leader, t_place, t_filename)" + "VALUES(?, ?, ?, ?, ?, ?, ?)";
template.update(SQL, team.getTeamId(),team.getTeamName(),team.getMemberNumber(),team.getPhoneNumber(),team.getLeaderName(),team.getPrefArea(),team.getFileName());
}
@Override
public void setUpdateTeam(Team team) {
if(team.getFileName()!=null) {
String SQL = "UPDATE team SET t_name=?, t_people=?, t_number=?, t_leader=?, t_place=?, t_filename=? WHERE t_id=?";
template.update(SQL, team.getTeamName(),team.getMemberNumber(),team.getPhoneNumber(),team.getLeaderName(),team.getPrefArea(),team.getFileName(),team.getTeamId());
}
else if(team.getFileName()==null) {
String SQL = "UPDATE team SET t_name=?, t_people=?, t_number=?, t_leader=?, t_place=? WHERE t_id=?";
template.update(SQL, team.getTeamName(),team.getMemberNumber(),team.getPhoneNumber(),team.getLeaderName(),team.getPrefArea(),team.getTeamId());
}
}
@Override
public void setDeleteTeam(String teamId) {
String SQL = "DELETE FROM team WHERE t_id=?";
this.template.update(SQL, teamId);
}
}
TeamRowMapper.java
package com.springmvc.repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.jsp.jstl.sql.Result;
import org.springframework.jdbc.core.RowMapper;
import com.springmvc.domain.Team;
public class TeamRowMapper implements RowMapper<Team>{
public Team mapRow(ResultSet rs, int rowNum) throws SQLException{
Team team = new Team();
team.setTeamId(rs.getString(1));
team.setTeamName(rs.getString(2));
team.setMemberNumber(rs.getInt(3));
team.setPhoneNumber(rs.getString(4));
team.setLeaderName(rs.getString(5));
team.setPrefArea(rs.getString(6));
team.setFileName(rs.getString(7));
return team;
}
}
등록 페이지
createTeam.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<title>구단 등록</title>
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="./home">Home</a>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">구단 등록</h1>
</div>
</div>
<div class="container">
<form:form modelAttribute="member" enctype="multipart/form-data" class="form-horizontal">
<fieldset>
<div class="form-group row">
<label class="col-sm-2 control-label">구단ID</label>
<div class="col-sm-3">
<form:input path="teamId" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">구단명</label>
<div class="col-sm-3">
<form:input path="teamName" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">생년월일</label>
<div class="col-sm-3">
<form:input type="date" path="birth" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">성별</label>
<div class="col-sm-3">
<form:radiobutton path="sex" value="남성" class="form-control" />남성
<form:radiobutton path="sex" value="여성" class="form-control" />여성
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">인원수</label>
<div class="col-sm-3">
<form:input path="memberNumber" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">부상정보</label>
<div class="col-sm-5">
<form:textarea path="injury" cols="50" rows="2" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">수강강의</label>
<div class="col-sm-3">
<form:input path="classId" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">코치번호</label>
<div class="col-sm-3">
<form:input path="teacherId" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">개인성적</label>
<div class="col-sm-3">
<form:input path="personalRecord" class="form-control" />
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-primary" value="등록하기" />
<input type="reset" class="btn btn-primary" value="다시쓰기" />
</div>
</div>
</fieldset>
</form:form>
<hr>
<footer>
<p>© Member</p>
</footer>
</div>
</body>
</html>
팀 전체 조회
teams.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!-- form 사용을 위한 선언 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<script src="${pageContext.request.contextPath }/resources/js/controllers.js"></script>
<!-- 스크립트 사용을 위해 선언 -->
<title>팀 정보</title>
</head>
<body>
<h2>팀 목록</h2>
<c:forEach var="team" items="${teamList}">
<div>
<p>팀 ID: ${team.teamId}</p>
<p>팀 이름: ${team.teamName}</p>
<p>인원수 : ${team.memberNumber}</p>
<p>구단장 : ${team.leaderName}</p>
<p>대표번호 : ${team.phoneNumber}</p>
<p>선호지역 : ${team.prefArea}</p>
<p><a href="<c:url value="/team/team?id=${team.teamId}"/>"class="btn btn-secondary" role="button">상세정보 »</a>
</div>
<hr>
</c:forEach>
</body>
</html>
상세보기
team.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>팀 정보</h2>
<c:if test="${not empty tb}">
<div class="col-md-4">
<c:choose>
<c:when test="${tb.getTeamImage() == null}">
<img src="<c:url value='/resources/images/${tb.fileName}'/>" style="width: 50%"/>
</c:when>
<c:otherwise>
<img src="<c:url value='/resources/images/${tb.fileName}'/>" style="width: 50%"/>
</c:otherwise>
</c:choose>
</div>
<div>
<p>팀 ID: ${tb.teamId}</p>
<p>팀 이름: ${tb.teamName}</p>
<form:form name="addForm" method="put">
<a href='<c:url value="/team/update?id=${tb.teamId}"/>' class="btn btn-success">수정»</a>
<a href="<c:url value='/team/delete?id=${tb.teamId}'/>" class="btn btn-danger" onclick="return deleteConfirm('${tb.teamId}')">삭제 »</a>
</form:form>
</div>
<hr>
</c:if>
</body>
</html>
구단 수정
add.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="<c:url value="/resources/css/bootstrap.min.css"/>"rel="stylesheet" />
<title>구단 등록</title>
</head>
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="./home">Home</a>
</div>
</div>
</nav>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">구단 등록</h1>
</div>
</div>
<div class="container">
<form:form modelAttribute="addTeam" enctype="multipart/form-data" class="form-horizontal">
<fieldset>
<div class="form-group row">
<label class="col-sm-2 control-label">구단ID</label>
<div class="col-sm-3">
<form:input path="teamId" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">구단명</label>
<div class="col-sm-3">
<form:input path="teamName" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">인원수</label>
<div class="col-sm-3">
<form:input path="memberNumber" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">대표번호</label>
<div class="col-sm-3">
<form:input path="phoneNumber" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">구단장명</label>
<div class="col-sm-7">
<form:input path="leaderName" class="form-control" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">선호지역</label>
<div class="col-sm-3">
<form:checkbox path="prefArea" value="서울특별시" class="form-control" />서울특별시
<form:checkbox path="prefArea" value="인천광역시" class="form-control" />인천광역시
<form:checkbox path="prefArea" value="경상남도" class="form-control" />경상남도
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 control-label">구단사진</label>
<div class="col-sm-7">
<form:input path="teamImage" type="file" class="form-control" />
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-primary" value="등록하기" />
<input type="reset" class="btn btn-primary" value="다시쓰기" />
</div>
</div>
</fieldset>
</form:form>
<hr>
<footer>
<p>© Member</p>
</footer>
</div>
</body>
</html>
삭제
'코딩' 카테고리의 다른 글
이번주 리뷰 (0) | 2024.07.05 |
---|---|
AOP (0) | 2024.06.25 |
JAVA 정리 - 1 (0) | 2024.04.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday