파이널

주가희·2023년 12월 26일

2023-12-26

  • sports_equipment 테이블에 equipment_active 컬럼 추가 vo수정
# 파일 업로드 설정
file.upload.directory =/img
<<<<<<< HEAD
spring.servlet.multipart.max-file-size=128KB 
spring.servlet.multipart.max-request-size=128KB 
=======
spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
>>>>>>> branch 'main' of https://github.com/gurehd1105/final.git

<jsp:include page="/inc/admin_header.jsp" />
<jsp:include page="/inc/admin_navbar.jsp" />
<jsp:include page="/inc/admin_sidebar.jsp" />


package com.example.gym.service;

import java.io.File;

import java.io.IOException;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.example.gym.controller.SportsEquipmentController;
import com.example.gym.mapper.SportsEquipmentMapper;
import com.example.gym.vo.SportsEquipment;
import com.example.gym.vo.SportsEquipmentImg;

import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
@Transactional
public class SportsEquipmentService {
	@Autowired private SportsEquipmentMapper sportsEquipmentMapper;
	
	public void insertSportsEquipmentService(HttpSession session,
												String path,
												String itemName, 
												int itemPrice, 
												MultipartFile[] sportsEquipmentImgList) {
		
		//sportsEquipment 추가
		SportsEquipment sportsEquipment = new SportsEquipment();
		sportsEquipment.setEmployeeNo(1); //employee session 구현 후 수정
		sportsEquipment.setItemName(itemName);
		sportsEquipment.setItemPrice(itemPrice);
		
		//mapper 호출
		int row1 = sportsEquipmentMapper.insertSportsEquipment(sportsEquipment);
		
		//sportsEquipment 정보 추가 실패했을 경우 -> 강제로 예외발생 트랜잭션 처리
		if(row1 != 1) {
			throw new RuntimeException();
		}
		
		//추가 된 sportsEquipment 디버깅
		System.err.println(sportsEquipment + " <-- 추가 된 sportsEquipment");
		log.info(sportsEquipment + " <-- 추가 된 sportsEquipment");
		
		//sportsEquipmentImg 추가
		for (MultipartFile equipmentImg : sportsEquipmentImgList) {
			SportsEquipmentImg sportsEquipmentImg = new SportsEquipmentImg();
			
			//portsEquipmentImgFileName
			String fileName = UUID.randomUUID().toString();
			//확장자
			String originName = equipmentImg.getOriginalFilename();
			String extensionName = originName.substring(originName.lastIndexOf("."));
			
			sportsEquipmentImg.setSportsEquipmentNo(sportsEquipment.getSportsEquipmentNo());
			sportsEquipmentImg.setSportsEquipmentImgSize((int)equipmentImg.getSize());
			sportsEquipmentImg.setSportsEquipmentImgType(equipmentImg.getContentType());
			sportsEquipmentImg.setSportsEquipmentImgOriginName(originName);
			sportsEquipmentImg.setSportsEquipmentImgFileName(fileName+extensionName);
		
			//mapper 호출
			int row2 = sportsEquipmentMapper.insertSportsEquipmentImg(sportsEquipmentImg);
			//sportsEquipmentImg 추가 실패했을 경우 -> 강제로 예외발생 트랜잭션 처리
			if(row2 != 1) {
				throw new RuntimeException();
			}
			File file = new File(path+"/"+fileName+extensionName);
			try {
				equipmentImg.transferTo(file);
			} catch (IllegalStateException e) {
				 e.printStackTrace();
				throw new RuntimeException();
			} catch (IOException e) {
				 e.printStackTrace();
				throw new RuntimeException();
			}
		}
	}

}
package com.example.gym.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.example.gym.service.SportsEquipmentService;

import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class SportsEquipmentController {
	@Autowired SportsEquipmentService sportsEquipmentService;
	
	@GetMapping("insertSportsEquipment")
	public String insertSportsEquipment(HttpSession session) {
		return "sportsEquipment/insertSportsEquipment";
	}
	
	@PostMapping("insertSportsEquipment")
	public String insertSportsEquipment(HttpSession session,
	                                    @RequestParam String itemName,
	                                    @RequestParam int itemPrice,
	                                    @RequestParam("sportsEquipmentImg") MultipartFile[] sportsEquipmentImgList) {
	    String path = session.getServletContext().getRealPath("/upload/sportsEquipment");
	    sportsEquipmentService.insertSportsEquipmentService(session, path, itemName, itemPrice, sportsEquipmentImgList);

	    return "sportsequipment/sportsEquipmentList";
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.gym.mapper.SportsEquipmentMapper">
	
	<insert id="insertSportsEquipment" parameterType="com.example.gym.vo.SportsEquipment">
	
		<selectKey order="AFTER" resultType="int" keyProperty="sportsEquipmentNo">
		SELECT last_insert_id();<!-- 제일 마지막에 입력된 키값을 받아옴 -->
		</selectKey>
		INSERT INTO sports_equipment(
				employee_no,
				item_name,
				item_price,
				createdate,
				updatedate
			)VALUES(
				#{employeeNo},
				#{itemName},
				#{itemPrice},
				NOW(),
				NOW()
			)
	</insert> 
	
	<insert id="insertSportsEquipmentImg" parameterType="com.example.gym.vo.SportsEquipmentImg">
	    INSERT INTO sports_equipment_img(
	        sports_equipment_no,
	        sports_equipment_img_origin_name,
	        sports_equipment_img_file_name,
	        sports_equipment_img_size,
	        sports_equipment_img_type,
	        createdate,
	        updatedate
	    ) VALUES (
	        #{sportsEquipmentNo},
	        #{sportsEquipmentImgOriginName},
	        #{sportsEquipmentImgFileName},
	        #{sportsEquipmentImgSize},
	        #{sportsEquipmentImgType},
	        NOW(),
	        NOW()
	    )
	</insert>

</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <form method="post" action="${pageContext.request.contextPath}/insertSportsEquipment" enctype="multipart/form-data">
      <div>
         이름 : <input type="text" name="itemName">
      </div>
      <div>
         가격 : <input type="number" name="itemPrice">
      </div>
      <div>
         이미지 : <input type="file" name="sportsEquipmentImg" multiple>
      </div>
      <div>
         <button type="submit">입력</button>
      </div>
   </form>
</body>
</html>
#포트 설정•
server.port=80
server.servlet.context-path=/finalP

# view 뷰 설정•
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp

# db 설정
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://3.35.1.127:3306/final
spring.datasource.username=root
spring.datasource.password=java1234

# multipart 허용
spring.servlet.multipart.enabled=true
# Multipart: 최대 파일 업로드 크기
spring.servlet.multipart.max-file-size=10MB
# Multipart: 동시 최대 요청 크기
spring.servlet.multipart.max-request-size=50MB
# Multipart: 파일 또는 매개 변수 액세스 시점에서 다중 파트 요청을 느리게 해결할지 여부
spring.servlet.multipart.resolve-lazily=false

# log 설정•
# 디버깅 레벨
# fatal() > error() > warn() > info() > debug() > trace()
debug=true
logging.level.com.example.gym=debug
logging.level.com.example.gym.mapper=debug
logging.level.com.example.gym.rest=debug
logging.level.com.example.gym.controller=debug
logging.level.com.example.gym.service=debug

layout.admin=/gym/admin/darkpan-1.0.0
layout.user=/gym/user/gymlife-master
package com.example.gym.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor

public class SportsEquipment {
	private int sportsEquipmentNo;
	private int employeeNo;
	private String itemName;
	private String createdate;
	private String updatedate;
	private String equipmentActive;
	private int itemPrice;
}
package com.example.gym.service;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import com.example.gym.mapper.SportsEquipmentMapper;
import com.example.gym.vo.SportsEquipment;
import com.example.gym.vo.SportsEquipmentImg;

import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
@Transactional
public class SportsEquipmentService {
	@Autowired private SportsEquipmentMapper sportsEquipmentMapper;
	
	public void insertSportsEquipmentService(HttpSession session,
												String path,
												String itemName, 
												int itemPrice, 
												MultipartFile[] sportsEquipmentImgList) {
		
		//sportsEquipment 추가
		SportsEquipment sportsEquipment = new SportsEquipment();
		sportsEquipment.setEmployeeNo(1); //employee session 구현 후 수정
		sportsEquipment.setItemName(itemName);
		sportsEquipment.setItemPrice(itemPrice);
		
		//mapper 호출
		int row1 = sportsEquipmentMapper.insertSportsEquipment(sportsEquipment);
		
		//sportsEquipment 정보 추가 실패했을 경우 -> 강제로 예외발생 트랜잭션 처리
		if(row1 != 1) {
			throw new RuntimeException();
		}
		
		//추가 된 sportsEquipment 디버깅
		System.err.println(sportsEquipment + " <-- 추가 된 sportsEquipment");
		log.info(sportsEquipment + " <-- 추가 된 sportsEquipment");
		
		//sportsEquipmentImg 추가
		for (MultipartFile equipmentImg : sportsEquipmentImgList) {
			SportsEquipmentImg sportsEquipmentImg = new SportsEquipmentImg();
			
			//portsEquipmentImgFileName
			String fileName = UUID.randomUUID().toString();
			//확장자
			String originName = equipmentImg.getOriginalFilename();
			String extensionName = originName.substring(originName.lastIndexOf("."));
			
			sportsEquipmentImg.setSportsEquipmentNo(sportsEquipment.getSportsEquipmentNo());
			sportsEquipmentImg.setSportsEquipmentImgSize((int)equipmentImg.getSize());
			sportsEquipmentImg.setSportsEquipmentImgType(equipmentImg.getContentType());
			sportsEquipmentImg.setSportsEquipmentImgOriginName(originName);
			sportsEquipmentImg.setSportsEquipmentImgFileName(fileName+extensionName);
		
			//mapper 호출
			int row2 = sportsEquipmentMapper.insertSportsEquipmentImg(sportsEquipmentImg);
			//sportsEquipmentImg 추가 실패했을 경우 -> 강제로 예외발생 트랜잭션 처리
			if(row2 != 1) {
				throw new RuntimeException();
			}
			File file = new File(path+"/"+fileName+extensionName);
			try {
				equipmentImg.transferTo(file);
			} catch (IllegalStateException e) {
				 e.printStackTrace();
				throw new RuntimeException();
			} catch (IOException e) {
				 e.printStackTrace();
				throw new RuntimeException();
			}
		}
	}

	public Map<String,Object> selectSportsEquipmentByPageService(HttpSession session,
													int currentPage,
													String searchWord) {
		//디버깅
		log.info(searchWord);
		log.info("Current page: {}", currentPage);
		
		//페이징
		int rowPerPage = 5; //한 페이지에 표시할 equipment 수 
		int beginRow = (currentPage - 1) * rowPerPage;
		
		//mapper 호출 
		int sportsEquipmentCnt = sportsEquipmentMapper.selectSportsEquipmentCnt(searchWord);
		int lastPage = sportsEquipmentCnt/rowPerPage;
		
		if(sportsEquipmentCnt%rowPerPage != 0) {
			lastPage = lastPage + 1;
		}
		
		//mapper의 매개변수로 들어갈 paramMap 생성
		Map<String,Object> paramMap = new HashMap<>();
		paramMap.put("searchWord", searchWord);
		paramMap.put("beginRow", beginRow);
		paramMap.put("rowPerPage", rowPerPage);
		
		//mapper 호출
		List<Map<String,Object>> sportsEquipmentList = sportsEquipmentMapper.selectSportsEquipmentByPage(paramMap);
		
		//controller에 보내줄 resultMap 생성
		Map<String,Object> resultMap = new HashMap<>();
		
		resultMap.put("lastPage", lastPage);
		resultMap.put("sportsEquipmentList", sportsEquipmentList);
		
		return resultMap;
	}
}
package com.example.gym.controller;

import java.util.HashMap;
import java.util.Map;

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.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.example.gym.service.SportsEquipmentService;

import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class SportsEquipmentController {
	@Autowired SportsEquipmentService sportsEquipmentService;
	
	//SportsEquipment 추가 폼
	@GetMapping("insertSportsEquipment")
	public String insertSportsEquipment(HttpSession session) {
//		//session 유효성 검사
//		if(session.getAttribute("") == null) {
//			return "";
//		}
		
		return "sportsEquipment/insertSportsEquipment";
	}

	//SportsEquipment 추가 액션
	@PostMapping("insertSportsEquipment")
	public String insertSportsEquipment(HttpSession session,
	                                    @RequestParam String itemName,
	                                    @RequestParam int itemPrice,
	                                    @RequestParam("sportsEquipmentImg") MultipartFile[] sportsEquipmentImgList) {
		
		//파일업로드 경로 설정
	    String path = session.getServletContext().getRealPath("/upload/sportsEquipment");
	    
	    //service 호출
	    sportsEquipmentService.insertSportsEquipmentService(session, path, itemName, itemPrice, sportsEquipmentImgList);

	    return "sportsEquipment/sportsEquipmentList";
	}
	
	@GetMapping("SportsEquipmentList")
	public String selectSportsEquipmentList(HttpSession session,
											Model model,
											@RequestParam(defaultValue = "1") int currentPage,
											@RequestParam(defaultValue = "") String searchWord) {
//		//session 유효성 검사
//		if(session.getAttribute("") == null) {
//			return "";
//		}
		
		//service 호출
		Map<String,Object> map = sportsEquipmentService.selectSportsEquipmentByPageService(session, currentPage, searchWord);
		
		//jsp에서 출력할 model
		model.addAttribute("sportsEquipmentList", map.get("sportsEquipmentList"));
		model.addAttribute("lastPage", map.get("lastPage"));
		
		return "sportsEquipment/sportsEquipmentList";
	}
	
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.gym.mapper.SportsEquipmentMapper">
	
	<insert id="insertSportsEquipment" parameterType="com.example.gym.vo.SportsEquipment">
	
		<selectKey order="AFTER" resultType="int" keyProperty="sportsEquipmentNo">
		SELECT last_insert_id();<!-- 제일 마지막에 입력된 키값을 받아옴 -->
		</selectKey>
		INSERT INTO sports_equipment(
				employee_no,
				item_name,
				item_price,
				createdate,
				updatedate
			)VALUES(
				#{employeeNo},
				#{itemName},
				#{itemPrice},
				NOW(),
				NOW()
			)
	</insert> 
	
	<insert id="insertSportsEquipmentImg" parameterType="com.example.gym.vo.SportsEquipmentImg">
	    INSERT INTO sports_equipment_img(
	        sports_equipment_no,
	        sports_equipment_img_origin_name,
	        sports_equipment_img_file_name,
	        sports_equipment_img_size,
	        sports_equipment_img_type,
	        createdate,
	        updatedate
	    ) VALUES (
	        #{sportsEquipmentNo},
	        #{sportsEquipmentImgOriginName},
	        #{sportsEquipmentImgFileName},
	        #{sportsEquipmentImgSize},
	        #{sportsEquipmentImgType},
	        NOW(),
	        NOW()
	    )
	</insert>

	<select id="selectSportsEquipmentByPage" parameterType="java.util.Map" resultType="java.util.Map">
		SELECT 
			sports_equipment_no sportsEquipmentNo,
			employee_no employeeNo,
			item_name itemName,
			item_price itemPrice,
			updatedate updatedate,
			createdate createdate
		FROM sports_equipment
		<where>
			<if test="searchWord != ''">
				item_name LIKE CONCAT('%',#{searchWord},'%')
			</if>
		</where>
		LIMIT #{beginRow},#{rowPerPage}
	</select>
	
	<select id="selectSportsEquipmentCnt" parameterType="String" resultType="int">
		SELECT 
			COUNT(sports_equipment_no)
		FROM sports_equipment
		<where>
			<if test="searchWord != ''">
				item_name LIKE CONCAT('%',#{searchWord},'%')
			</if>
		</where>
	</select>
</mapper>

12-27
쿼리수정 - 본사직원만 추가 가능하도록
- 추가&리스트 페이지 에서는 이미지를 하나만 보이도록 하도록 쿼리 수정

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div>
		<h2>sportsEquipment Insert</h2>
	</div>
   <form method="post" action="${pageContext.request.contextPath}/insertSportsEquipment" enctype="multipart/form-data">
      <div>
         이름 : <input type="text" name="itemName">
      </div>
      <div>
         가격 : <input type="number" name="itemPrice">
      </div>
      <div>
         이미지 : <input type="file" name="sportsEquipmentImg" multiple>
      </div>
      <div>
         <button type="submit">입력</button>
      </div>
   </form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="title" value="장비리스트페이지" />
<c:set var="description" value="현재 발주 할 수 있는 장비의 리스트르 확인 할 수 있는 사이트" />
<c:set var="keywords" value="장비,소모품,발주,폐기" />

<c:set var="body">

	<div>
		<h2>sportsEquipment Insert</h2>
	</div>
   <form method="post" action="${pageContext.request.contextPath}/insertSportsEquipment" enctype="multipart/form-data">
      <div>
         이름 : <input type="text" name="itemName">
      </div>
      <div>
         가격 : <input type="number" name="itemPrice">
      </div>
      <div>
         이미지 : <input type="file" name="sportsEquipmentImg" multiple>
      </div>
      <div>
         <button type="submit">입력</button>
      </div>
   </form>
   
</c:set>

<c:set var="script">

</c:set>

<%@ include file="/inc/admin_header.jsp"%>
	<select id="selectSportsEquipmentByPage" parameterType="java.util.Map" resultType="java.util.Map">
	    SELECT 
	        se.sports_equipment_no sportsEquipmentNo,
	        se.item_name itemName,
	        se.item_price itemPrice,
	        se.equipment_active equipmentActive,
	        (SELECT sei.sports_equipment_img_file_name
	         FROM sports_equipment_img sei
	         WHERE sei.sports_equipment_no = se.sports_equipment_no
	         LIMIT 1 <!-- 리스트에서는 img를 하나만 가지고 오기위한 서브쿼리 -->
	        ) sportsEquipmentImgFileName
	    FROM sports_equipment se
	    <where>
	        <if test="searchWord != ''">
	            AND item_name LIKE CONCAT('%',#{searchWord},'%')
	        </if>
	    </where>
	    LIMIT #{beginRow}, #{rowPerPage}
	</select>
profile
주웅

0개의 댓글