티스토리 뷰

코딩

[19주 4일차] 프로젝트

ehzim 2024. 2. 15. 17:12

프로젝트를 위해 동호회 야구구단을 관리하는 프로그램을 작성했다.

구단을 등록하고 목록을 확인하고 특정 구단을 상세보기 그리고 수정 및 삭제 기능을 구현했다.

 

 

 

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>&copy; 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">상세정보 &raquo;</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">수정&raquo;</a>
		    <a href="<c:url value='/team/delete?id=${tb.teamId}'/>" class="btn btn-danger" onclick="return deleteConfirm('${tb.teamId}')">삭제 &raquo;</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>&copy; Member</p>
	</footer>	
	</div>
</body>
</html>

 

 

 

 

 

 

 

 

 

 


삭제

 

 

 

 

 

 

'코딩' 카테고리의 다른 글

이번주 리뷰  (0) 2024.07.05
AOP  (0) 2024.06.25
JAVA 정리 - 1  (0) 2024.04.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday