티스토리 뷰
공부할 것!!
테이블 조인!!!!
Controller
GameContoller.java
package com.springmvc.controller;
import java.io.File;
import java.util.List;
import java.util.Random;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.*;
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 com.springmvc.domain.Game;
import com.springmvc.domain.Match;
import com.springmvc.service.GameService;
import com.springmvc.service.MatchService;
@Controller
@RequestMapping("/games")
public class GameController {
@Autowired
private GameService gameService;
@Autowired
private MatchService matchService;
@GetMapping
public String requestGameList(Model model)
{
List<Game> list = gameService.readAllGame();
model.addAttribute("list",list);
return "/Game/games";
}
@GetMapping("/all")
public String requestAllGames(Model model)
{
List<Game> list = gameService.readAllGame();
model.addAttribute("list",list);
return "/Game/game";
}
@GetMapping("/game")
public String requestGameById(@RequestParam("id") String gameId, Model model) {
// Match matchById = matchService.readMatchById(gameId);
// model.addAttribute("match",matchById);
Game gameById = gameService.readGameById(gameId);
model.addAttribute("game",gameById);
return "/Game/game";
}
@GetMapping("/add")
public String requestAddGameForm(@ModelAttribute("addGame")Game game, Model model)
{
return "/Game/addGame";
}
@PostMapping("/add")
public String submitAddNewGame(@ModelAttribute("addGame")Game game, Model model ,HttpServletRequest request) {
System.out.println("POSTMAPPING 도착");
String gameId = generateGameId(10);
System.out.println(gameId);
game.setGameId(gameId);
// Match match = new Match();
// match.setGameId(gameId);
MultipartFile img = game.getGameImage();
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);
game.setFileName(saveName);
}
catch(Exception e) {
throw new RuntimeException("사진 등록 실패");
}
}
gameService.setNewGame(game);
return "redirect:/games";
}
private String generateGameId(int length) {
if(length<=0) {
throw new IllegalArgumentException("길이는 1이상이어야 합니다.");
}
Random random = new Random();
StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<length; i++) {
int randomNumber = random.nextInt(10);
stringBuilder.append(randomNumber);
}
return "G_"+ stringBuilder.toString();
}
@GetMapping("/update")
public String getUpdateGameForm(@ModelAttribute("UpdateGame") Game game, @RequestParam("id") String gameId, Model model) {
System.out.println("game Id : " +gameId);
Game gameById = gameService.readGameById(gameId);
model.addAttribute("game",gameById);
return "/Game/updateGame";
}
@PostMapping("/update")
public String submitUpdateGameForm(@ModelAttribute("UpdateGame") Game game, HttpServletRequest request, Model model) {
MultipartFile img = game.getGameImage();
System.out.println("포스트맵핑");
System.out.println("game Id : " +game.getTeamId1());
System.out.println(game);
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);
game.setFileName(saveName);
}
catch(Exception e) {
throw new RuntimeException("사진 등록 실패");
}
}
gameService.setUpdateGame(game);
return "redirect:/games";
}
@RequestMapping(value="/delete")
public String getDeleteForm(Model model, @RequestParam("id")String gameId) {
System.out.println("delete시작");
System.out.println(gameId+"삭제됨!!!");
gameService.setDeleteGame(gameId);
return "redirect:/games";
}
}
Domain
Game.java
package com.springmvc.domain;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
public class Game implements Serializable {
private static final long serialVersionUID = -1774939428596054428L;
private String gameId; //게임아이디
private String teamId1; //팀아이디1 not null
private String teamName1; //팀명1 not null
private String date; //경기날짜
private String userId; //사용자 아이디
private String userName; //사용자 이름
private String userNumber; //사용자전화번호
private String stadium; //경기장
private String fileName;
private MultipartFile gameImage;
private Match match;
private List<Match> matches = new ArrayList<>();
public List<Match> getMatches(){
return matches;
}
public Game() {
super();
// TODO Auto-generated constructor stub
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public MultipartFile getGameImage() {
return gameImage;
}
public void setGameImage(MultipartFile gameImage) {
this.gameImage = gameImage;
}
public String getGameId() {
return gameId;
}
public void setGameId(String gameId) {
this.gameId = gameId;
}
public String getTeamId1() {
return teamId1;
}
public void setTeamId1(String teamId1) {
this.teamId1 = teamId1;
}
public String getTeamName1() {
return teamName1;
}
public void setTeamName1(String teamName1) {
this.teamName1 = teamName1;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserNumber() {
return userNumber;
}
public void setUserNumber(String userNumber) {
this.userNumber = userNumber;
}
public String getStadium() {
return stadium;
}
public void setStadium(String stadium) {
this.stadium = stadium;
}
public Match getMatch() {
return match;
}
public void setMatch(Match match) {
this.match = match;
}
}
Repository
GameRepository.java
package com.springmvc.repository;
import java.util.List;
import com.springmvc.domain.Game;
public interface GameRepository {
List<Game> readAllGame();
Game readGameById(String gameId);
void setNewGame(Game game);
void setUpdateGame(Game game);
void setDeleteGame(String gameId);
}
GameRepositoryImpl.java
package com.springmvc.repository;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.Game;
import com.springmvc.domain.Match;
@Repository
public class GameRepositoryImpl implements GameRepository{
private JdbcTemplate template;
private List<Game> listOfGames = new ArrayList<Game>();
@Autowired
public void setJdbcTemplate(DataSource dataSource) {
this.template = new JdbcTemplate(dataSource);
}
@Override
public List<Game> readAllGame() {
String SQL = "SELECT * FROM game g left join matching m ON g.g_id = m.g_id";
Map<String, Game> gameMap = new HashMap<>();
template.query(SQL, rs -> {
String gameId = rs.getString("g.g_id");
// Game 객체가 이미 Map에 있는지 확인
Game game = gameMap.get(gameId);
if (game == null) {
// Map에 없다면 Game 객체 생성
game = new Game();
game.setGameId(gameId);
// 기존의 Game 속성 설정 코드
gameMap.put(gameId, game);
}
game.setTeamId1(rs.getString("g.t_id1"));
game.setTeamName1(rs.getString("g.t_name1"));
game.setDate(rs.getString("g.g_date"));
game.setUserId(rs.getString("g.userid"));
game.setUserName(rs.getString("g.username"));
game.setUserNumber(rs.getString("g.userphone"));
game.setStadium(rs.getString("g.g_stadium"));
game.setFileName(rs.getString("g.g_filename"));
// Match 객체 생성 및 설정
Match match = new Match();
match.setTeamId(rs.getString("m.t_id"));
match.setTeamName(rs.getString("m.t_name"));
match.setUserId(rs.getString("m.userid"));
match.setUserName(rs.getString("m.username"));
match.setUserNumber(rs.getString("m.userphone"));
match.setFileName(rs.getString("m.g_filename"));
// 다른 Match 속성 설정 코드들...
// Game 객체에 Match 추가
game.getMatches().add(match);
});
return new ArrayList<>(gameMap.values());
}
@Override
public Game readGameById(String gameId) {
String SQL = "SELECT * FROM game g LEFT JOIN matching m ON g.g_id = m.g_id WHERE g.g_id = ?";
Map<String, Game> gameMap = new HashMap<>();
template.query(SQL, new Object[]{gameId}, rs -> {
String currentGameId = rs.getString("g.g_id");
// Game 객체가 이미 Map에 있는지 확인
Game game = gameMap.get(currentGameId );
if (game == null) {
// Map에 없다면 Game 객체 생성
game = new Game();
game.setGameId(currentGameId );
// 기존의 Game 속성 설정 코드
gameMap.put(currentGameId , game);
}
game.setTeamId1(rs.getString("g.t_id1"));
game.setTeamName1(rs.getString("g.t_name1"));
game.setDate(rs.getString("g.g_date"));
game.setUserId(rs.getString("g.userid"));
game.setUserName(rs.getString("g.username"));
game.setUserNumber(rs.getString("g.userphone"));
game.setStadium(rs.getString("g.g_stadium"));
game.setFileName(rs.getString("g.g_filename"));
// Match 객체 생성 및 설정
Match match = new Match();
match.setTeamId(rs.getString("m.t_id"));
match.setTeamName(rs.getString("m.t_name"));
match.setUserId(rs.getString("m.userid"));
match.setUserName(rs.getString("m.username"));
match.setUserNumber(rs.getString("m.userphone"));
match.setFileName(rs.getString("m.g_filename"));
// 다른 Match 속성 설정 코드들...
// Game 객체에 Match 추가
game.getMatches().add(match);
});
return gameMap.get(gameId);
}
@Override
public void setNewGame(Game game) {
String SQL = "INSERT INTO game(g_id, t_id1, t_name1, g_date, userid, username, userphone, g_stadium, g_filename)"+"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";
template.update(SQL,game.getGameId(), game.getTeamId1(), game.getTeamName1(), game.getDate(), game.getUserId(), game.getUserName(), game.getUserNumber(), game.getStadium(),game.getFileName());
}
@Override
public void setUpdateGame(Game game) {
if(game.getFileName()!=null) {
String SQL = "UPDATE game SET t_id1=?,t_name1=?,g_date=?,userid=?,username=?,userphone=?,g_stadium=?,g_filename=? WHERE g_id=?";
template.update(SQL,game.getTeamId1(), game.getTeamName1(), game.getDate(), game.getUserId(),game.getUserName(),game.getUserNumber(),game.getStadium(),game.getFileName(),game.getGameId());
}
else if(game.getFileName()==null) {
String SQL = "UPDATE game SET t_id1=?,t_name1=?,g_date=?,userid=?,username=?,userphone=?,g_stadium=? WHERE g_id=?";
template.update(SQL, game.getTeamId1(), game.getTeamName1(), game.getDate(), game.getUserId(),game.getUserName(),game.getUserNumber(),game.getStadium(),game.getGameId());
}
}
@Override
public void setDeleteGame(String gameId) {
String SQL = "DELETE FROM game WHERE g_id=?";
this.template.update(SQL, gameId);
}
public void setTemplate(JdbcTemplate template) {
this.template = template;
}
}
Service
GameService.java
package com.springmvc.service;
import java.util.List;
import com.springmvc.domain.Game;
public interface GameService {
List<Game> readAllGame();
Game readGameById(String gameId);
void setNewGame(Game game);
void setUpdateGame(Game game);
void setDeleteGame(String gameId);
}
GameServiceImpl.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.Game;
import com.springmvc.repository.GameRepository;
@Service
public class GameServiceImpl implements GameService{
@Autowired
GameRepository gameRepository;
@Override
public List<Game> readAllGame() {
// TODO Auto-generated method stub
return gameRepository.readAllGame();
}
@Override
public Game readGameById(String gameId) {
Game gameById = gameRepository.readGameById(gameId);
return gameById;
}
@Override
public void setNewGame(Game game) {
gameRepository.setNewGame(game);
}
@Override
public void setUpdateGame(Game game) {
gameRepository.setUpdateGame(game);
}
@Override
public void setDeleteGame(String gameId) {
gameRepository.setDeleteGame(gameId);
}
}
view
addGame.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>
<h3>경기 등록 페이지</h3>
<form:form modelAttribute="addGame" enctype="multipart/form-data">
<!-- <p> 아이디 : <form:input path="gameId"/> -->
<p> 팀 아이디 : <form:input path="teamId1"/> <!-- path 는 DTO 객체의 변수 -->
<p> 팀 이름 : <form:input path="teamName1"/>
<p> 경기 날짜 : <form:input type="date" path="date"/>
<p> 예약자 아이디 : <form:input path="userId"/>
<p> 예약자 이름 : <form:input path="userName"/>
<p> 전화번호 : <form:input path="userNumber"/>
<p> 경기장 : <form:input path="stadium" />
<p> 구단사진 : <form:input path="gameImage" type="file" class="form-control" />
<input type="submit" value="등록"/>
</form:form>
</body>
</html>
games.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="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<link href="<c:url value='/resources/css/bootstrap.min.css'/>"rel="stylesheet" />
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<c:forEach items="${list}" var="game">
<div class="col-md-7">
<h2> ${game.teamName1} vs ${game.getMatches().get(0).teamName}</h2>
<p> 경기 날짜 : ${game.date}
<p> 경기장 : ${game.stadium}
<a href="<c:url value='/games/game?id=${game.gameId}'/>" class="btn btn-success">상세보기</a>
<a href="<c:url value='/match/add?id=${game.gameId}'/>" class="btn btn-success">매칭</a>
<a href="<c:url value='/match/delete?id=${game.gameId}'/>" class="btn btn-danger" onclick="return deleteConfirm('${game.gameId}')">매칭취소 »</a>
</div>
</c:forEach>
</div>
</body>
</html>
game.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="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-8">
<h3>${game.gameId}</h3>
<div>
<img src="<c:url value='/resources/images/${game.fileName}'/>" alt="${game.teamName1} Image" width="50" height="50">
<h2>${game.teamName1}</h2>
<p>
</div>vs
<div>
<c:forEach var="match" items="${game.matches}">
<!-- <img src="<c:url value='/resources/images/${match.fileName}'/>" alt="${match.teamName} Image" width="50" height="50">-->
<img src="<c:url value='/resources/images/${match.fileName}'/>" style="width: 50" height="50"/>
<h2>${match.teamName}</h2>
<p>예약자 : ${match.userId }</p>
</c:forEach>
</div>
<p><b>경기일</b> : ${game.date}</p>
<p><b>경기장</b> : ${game.stadium}</p>
<p><b>예약자</b> : ${game.userId}</p>
<p><b>전화번호</b> : ${game.userNumber}</p>
<form:form name="addGame" method="put">
<a href="<c:url value="/games"/>"class="btn btn-secondary">목록 »</a>
<a href='<c:url value="/games/update?id=${game.gameId}"/>' class="btn btn-success">수정»</a>
<a href="<c:url value='/games/delete?id=${game.gameId}'/>" class="btn btn-danger" onclick="return deleteConfirm('${game.gameId}')">삭제 »</a>
</form:form>
<a href="<c:url value='/match/add?id=${game.gameId}'/>" class="btn btn-success">매칭</a>
<a href="<c:url value='/match/update?id=${game.gameId}'/>" class="btn btn-success">매칭수정</a>
<a href="<c:url value='/match/delete?id=${game.gameId}'/>" class="btn btn-danger" onclick="return deleteConfirm('${game.gameId}')">매칭취소 »</a>
<%-- <div>
<!-- Output game images -->
<img src="<c:url value='/resources/images/${game.fileName}'/>" alt="${game.teamName1} Image" width="50" height="50">
<img src="<c:url value='/resources/images/${game.matches[0].fileName}'/>" alt="${game.matches[0].teamName1} Image" width="50" height="50">
</div>
<h2>${game.teamName1} vs ${game.matches[0].teamName}</h2>
<br>
<!-- Output game details -->
<p><b>경기일</b> : ${game.date}</p>
<p><b>경기장</b> : ${game.stadium}</p>
<p><b>예약자</b> : ${game.userId}</p>
<p><b>전화번호</b> : ${game.userNumber}</p>
<br>
<!-- Output matches -->
<h4>Matches:</h4>
<c:forEach var="match" items="${game.matches}">
<p>${match.teamName} - ${match.userName}</p>
</c:forEach>
<form:form name="addGame" method="put">
<a href="<c:url value="/games"/>"class="btn btn-secondary">목록 »</a>
<a href='<c:url value="/games/update?id=${game.gameId}"/>' class="btn btn-success">수정»</a>
<a href="<c:url value='/games/delete?id=${game.gameId}'/>" class="btn btn-danger" onclick="return deleteConfirm('${game.gameId}')">삭제 »</a>
</form:form>
<a href="<c:url value='/match/add?id=${game.gameId}'/>" class="btn btn-success">매칭</a>
<a href="<c:url value='/match/delete?id=${game.gameId}'/>" class="btn btn-danger" onclick="return deleteConfirm('${game.gameId}')">매칭취소 »</a> --%>
</div>
</div>
</div>
</body>
</html>
updateGame.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" %>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>수정 페이지</h3>
<div class="col-md-4">
<img src="<c:url value='/resources/images/${game.fileName}'/>" alt="image" style="width: 20%"/>
</div>
<form:form modelAttribute="UpdateGame" action="./update?id=${game.gameId}" class="form-horizontal" enctype="multipart/form-data" method="post">
<p> 게임 아이디 : <form:input path="gameId" value="${game.gameId}" readonly="readonly"/>
<p> 팀1 아이디 : <form:input path="teamId1" value="${game.teamId1}"/> <!-- path 는 DTO 객체의 변수 -->
<p> 팀1 이름 : <form:input path="teamName1" value="${game.teamName1}"/>
<p> 경기 날짜 : <form:input path="date" value="${game.date}"/>
<p> 예약자 아이디 : <form:input path="userId" value="${game.userId}"/>
<p> 예약자명 : <form:input path="userName" value="${game.userName}"/>
<p> 예약자 번호 : <form:input path="userNumber" value="${game.userNumber}"/>
<p> 경기장 : <form:input path="stadium" value="${game.stadium}"/>
<div class="col-sm-10">
이미지<form:input path="gameImage" type="file" class="form-control"/>
</div>
<div class="form-group row">
<input type="submit" class="btn btn-primary" value="수정"/>
<a href="<c:url value="/games"/>" class="btn btn-primary">취소</a>
</div>
${game }
</form:form>
</body>
</html>
'코딩 > spring' 카테고리의 다른 글
[21주 1일차] 팀별 순위 (1) | 2024.02.26 |
---|---|
DB연결 preparedstatement (1) | 2024.02.25 |
[20주 5일차] 경기 매칭하기 (0) | 2024.02.23 |
[20주 3일차] 하나의 컨트롤러에서 여러 Service 클래스 참조하기 (0) | 2024.02.21 |
queryForObject() 메서드와 query() 메서드 (RowMapper) (0) | 2024.02.20 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday