교육 60일차

권재현·2021년 6월 15일
0

교육

목록 보기
45/49

Controller에서의 역활

시험준비

kjhTestASEController

package com.spring.sample.web.tests.controller;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.spring.sample.common.bean.PagingBean;
import com.spring.sample.common.service.IPagingService;
import com.spring.sample.web.tests.service.kjhITestSEService;

@Controller
public class kjhTestASEController {

	@Autowired
	public kjhITestSEService kjhiTestSEService;
	
	@Autowired
	public IPagingService iPagingService;
	
	@RequestMapping(value="/kjhtestSEList")
	public ModelAndView kjhtestSEList(
			@RequestParam HashMap<String, String> params,
			ModelAndView mav) {
		
		int page = 1;
		
		System.out.println(params);
		if(params.get("page")  != null ) {
			page = Integer.parseInt(params.get("page"));
		}
		
		mav.addObject("page", page);
		mav.setViewName("tests/kjhtestSEList");
		
		
		return mav;
	}
		
	@RequestMapping(value="/kjhtestSELists",
				method = RequestMethod.POST,
				produces = "text/json;charset=UTF-8")
	@ResponseBody
	public String kjhtestSELists(
			@RequestParam HashMap<String, String> params) throws Throwable{
		ObjectMapper mapper = new ObjectMapper();
		Map<String, Object> modelMap = new HashMap<String, Object>();
		
		//현재페이지
		int page = Integer.parseInt(params.get("page"));
		
		//총 게시글 수 
		int cnt = kjhiTestSEService.getSECnt(params);
		
		//페이징 정보취득 
		PagingBean pb= iPagingService.getPagingBean(page, cnt, 5, 3);
		
		//시작번호, 종료번호
		params.put("startCnt", Integer.toString(pb.getStartCount()));
		params.put("endCnt", Integer.toString(pb.getEndCount()));
		
		//목록 취득
		List<HashMap<String, String>>list = kjhiTestSEService.getSEList(params);
		
		modelMap.put("list", list);
		modelMap.put("pb", pb);
		
		return mapper.writeValueAsString(modelMap);
	}

	@RequestMapping(value="/kjhtestSEAdd")
	public ModelAndView testSEAdd(ModelAndView mav) {

		mav.setViewName("tests/kjhtestSEAdd");
		
		return mav;
	}
	//작성
	@RequestMapping(value="/kjhtestSEAdds",
					method = RequestMethod.POST,
					produces = "text/json;charset=UTF-8")
	@ResponseBody
	public String testSEAdds(
			@RequestParam HashMap<String, String> params) throws Throwable{
		ObjectMapper mapper = new ObjectMapper();
		Map<String, Object> modelMap = new HashMap<String, Object>();
		
		try {
			int cnt = kjhiTestSEService.addSE(params);
			
			if(cnt > 0) {
				modelMap.put("msg", "success");
			} else {
				modelMap.put("msg", "failed");
				
			}
		} catch (Exception e) {
			e.printStackTrace();
			modelMap.put("msg", "success");
		}
		
		
		return mapper.writeValueAsString(modelMap);
	}
	
	@RequestMapping(value="/kjhtestSEDetail")
	public ModelAndView testSEDetail(
			@RequestParam HashMap<String, String> params,
			ModelAndView mav) throws Throwable {
		
		HashMap<String, String> data = kjhiTestSEService.getSE(params);
		
		mav.addObject("data", data);
		
		mav.setViewName("tests/kjhtestSEDetail");
		return mav;
		
	}
	
	
	@RequestMapping(value="/kjhtestSEUpdate")
	public ModelAndView testSEUpdate(
			@RequestParam HashMap<String, String> params,
			ModelAndView mav) throws Throwable {
		
		HashMap<String, String> data = kjhiTestSEService.getSE(params);
		
		System.out.println("수정:"+data);
		
		mav.addObject("data", data);
		mav.setViewName("tests/kjhtestSEUpdate");
		return mav;
		
	}
	
	
	//수정
	@RequestMapping(value="/kjhtestASEUpdates",
	method = RequestMethod.POST,
	produces = "text/json;charset=UTF-8")
	@ResponseBody
	public String kjhtestASEUpdates(
	@RequestParam HashMap<String, String> params) throws Throwable{
	ObjectMapper mapper = new ObjectMapper();
	Map<String, Object> modelMap = new HashMap<String, Object>();
	
	try {
		int cnt = kjhiTestSEService.updateSE(params);
		System.out.println("수정2"+params);
		if(cnt > 0) {
		modelMap.put("msg", "success");
		} else {
		modelMap.put("msg", "failed");
		
		}
	
	} catch (Exception e) {
		e.printStackTrace();
		modelMap.put("msg", "success");
	}
	
	
	return mapper.writeValueAsString(modelMap);
	}
	
	//삭제
	@RequestMapping(value="/kjhtestSEDeletes",
			method = RequestMethod.POST,
			produces = "text/json;charset=UTF-8")
			@ResponseBody
			public String kjhtestSEDeletes(
			@RequestParam HashMap<String, String> params) throws Throwable{
			ObjectMapper mapper = new ObjectMapper();
			Map<String, Object> modelMap = new HashMap<String, Object>();
			
			try {
				int cnt = kjhiTestSEService.deleteSE(params);
				System.out.println("삭제"+params);
				if(cnt > 0) {
				modelMap.put("msg", "success");
				} else {
				modelMap.put("msg", "failed");
				
				}
			
			} catch (Exception e) {
				e.printStackTrace();
				modelMap.put("msg", "error");
			}
			
			
			return mapper.writeValueAsString(modelMap);
			}
}

kjhTestSEDao

package com.spring.sample.web.tests.dao;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class kjhTestSEDao implements kjhITestSEDao {

	@Autowired
	public SqlSession sqlSession;

	@Override
	public int getSECnt(HashMap<String, String> params) throws Throwable {
		return sqlSession.selectOne("SELL.getSECnt", params);
	}

	@Override
	public List<HashMap<String, String>> getSEList(HashMap<String, String> params) throws Throwable {
		return sqlSession.selectList("SELL.getSEList", params);
	}

	@Override
	public int addSE(HashMap<String, String> params) throws Throwable {

		return sqlSession.insert("SELL.addSE", params);
	}

	@Override
	public HashMap<String, String> getSE(HashMap<String, String> params) throws Throwable {

		return sqlSession.selectOne("SELL.getSE", params);
	}

	@Override
	public int updateSE(HashMap<String, String> params) throws Throwable {

		return sqlSession.update("SELL.updateSE", params);
	}

	@Override
	public int deleteSE(HashMap<String, String> params) throws Throwable {
	
		return sqlSession.delete("SELL.deleteSE", params);
	}
}

kjhSell_SQL

<?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="SELL"><!-- namespace: 클래스명과동일 -->
	<!-- id: 메소드명과 동일 -->
	<!-- resultType: row 1줄의 형태를 지정 -->
	<!-- 쿼리 작성 시 ; 이 들어가면 실행 되지 않음 -->
	<!--  총글개수 -->
	<select id="getSECnt" parameterType="hashmap" resultType="Integer">
		SELECT COUNT(*) AS CNT
		FROM SELL
		WHERE 1 = 1 
		 	<if test="searchTxt != null and searchTxt != ''">
	<!--choose는 case문  -->
			<choose>
		 		<when test="searchGbn ==0">
		 			AND ITEM_NAME LIKE '%' || #{searchTxt} || '%'
				</when>
				<when test="searchGbn == 1">
	       	  		AND COUNT LIKE '%' || #{searchTxt} || '%'
	       	   	</when>
	       	</choose>	
		</if>
	</select>
	
	<!-- 목록 -->
	<select id="getSEList" parameterType="hashmap" resultType="hashmap">
	SELECT SELL_NO,ITEM_NAME,COUNT,SE.DT
	FROM (SELECT SELL_NO,ITEM_NAME,COUNT,TO_CHAR(SELL_DT, 'YY-MM-DD') AS DT,
            ROW_NUMBER()OVER (ORDER BY SELL_NO DESC) AS RNUM
        FROM SELL
        WHERE 1 = 1
        	<if test="searchTxt != null and searchTxt != ''">
         	<choose>
         		<when test="searchGbn == 0">
         			AND ITEM_NAME LIKE '%' || #{searchTxt} || '%'
        		</when>
         		<when test="searchGbn == 1">
        			AND COUNT LIKE '%' || #{searchTxt} || '%'
        		</when>
        	</choose>
			</if>
	        ) SE
		WHERE SE.RNUM BETWEEN #{startCnt} AND #{endCnt}
	</select>	
	<!-- 등록 -->
	<insert id="addSE" parameterType="hashmap">
	INSERT INTO SELL(SELL_NO,ITEM_NAME,COUNT,SELL_DT)
	VALUES (SELL_SEQ.NEXTVAL,#{sNm},#{sNb},#{sDt})
	</insert>
	
	<!-- 상세보기 -->
	<select id="getSE" parameterType="hashmap" resultType="hashmap">
	SELECT SELL_NO,ITEM_NAME,COUNT,TO_CHAR(SELL_DT, 'YY-MM-DD') AS SELL_DT
	FROM SELL
	WHERE SELL_NO = #{sNo}
	</select>
	
	<update id="updateSE" parameterType="hashmap">
	UPDATE SELL SET ITEM_NAME = #{sNm}, COUNT = #{sNb}, SELL_DT = #{sDt}
	WHERE SELL_NO = #{sNo}
	</update>
	
	<delete id="deleteSE" parameterType="hashmap">
	DELETE FROM SELL
	WHERE SELL_NO = #{sNo}
	</delete>
</mapper>

kjhtestSEList(목록)

<%@ 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>목록</title>
<style type="text/css">
.paging_wrap{
	margin-top: 10px;
	margin-left: 50px;
}
.paging_wrap span{
	   
    padding: 5px;
    margin-left: 3px;
    margin-right: 3px;
    border: 1px solid #444;
    border-radius: 3px;
    width: 100px;
    cursor: pointer;
    text-align: center;
}

.paging_wrap span:hover{
	background-color: #1bc1fe;
}
</style>
<script type="text/javascript"
		src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	
	if("${param.searchGbn}" != ""){
		$("#searchGbn").val("${param.searchGbn}");
	}
	
	reloadList();
	
	$("#searchBtn").on("click",function(){
		$("#page").val(1);
		reloadList();
	});
	
	$(".paging_wrap").on("click","span",function(){
		$("#page").val($(this).attr("page"));
		$("#searchTxt").val($("#searchOldTxt").val());
		reloadList();
	});
	
	$("#writeBtn").on("click",function(){
		$("#actionForm").attr("action","kjhtestSEAdd")
		$("#actionForm").submit();
	});
	
	//상세보기
	$("tbody").on("click","tr",function(){
		$("#sNo").val($(this).attr("sno"));
		
		$("#actionForm").attr("action","kjhtestSEDetail")
		$("#actionForm").submit();
	});
}); //ready end


function reloadList(){
	var params = $("#actionForm").serialize();
	
	//ajax
	$.ajax({
		url: "kjhtestSELists",
		type: "post",
		dataType: "json",
		data: params,
		success : function(res){
			console.log(res);
			drawList(res.list);
			drawPaging(res.pb);
		},
		error: function(request, status, error){
			console.log(error);
			
			
		}
	});
} // reload end

//목록 그리기
function drawList(list){
	var html = "";
	
	// " + + "
	for(var d of list){                
	html += "<tr sno=\"" + d.SELL_NO + "\">";
	html +=	"<td>" + d.SELL_NO + "</td>";
	html +=	"<td>" + d.ITEM_NAME  + "</td>";
	html +=	"<td>" + d.COUNT + "</td>";
	html +=	"<td>" + d.DT + "</td>";
	html +=	"</tr>";
	}
	$("tbody").html(html);
}

function drawPaging(pb){
	
	var html = "";
	
	html += "<span page=\"1\">처음</span>";
	
	if($("#page").val() == "1"){
		html += "<span page=\"1\">이전</span>";
	} else{
		html += "<span page=\""+($("#page").val() -1) +"\">이전</span>";
	}
	
	for(var i =pb.startPcount ; i <= pb.endPcount ; i++){
		if($("#page").val() == i){
			html += "<span class=\"on\" page=\"" + i + "\"><b>" + i +  "</b></span>";
		} else{
			html +=	"<span page=\"" + i + "\">" + i + "</span>";
		}
	}
		
		if($("#page").val() == pb.maxPcount){
			html += "<span page=\"" + pb.maxPcount + "\">다음</span>";
		} else{
			html += "<span page=\"" + ($("#page").val() * 1 + 1)+ "\">다음</span>";
			
		}
		html += "<span page=\"" + pb.maxPcount + "\">마지막</span>";
		
		$(".paging_wrap").html(html);
}
</script>
</head>
<body>
<div class="search_area">
<form action="#" id="actionForm" method="post">
	<input type="hidden" id="sNo" name="sNo"/>
	<input type="hidden" id="page" name="page" value="${page}"/>
	<input type="hidden" id="searchOldTxt" name="searchOldTxt" value="${param.searchTxt}"/>
	<select id="searchGbn" name="searchGbn">
		<option value="0">물품명</option>
		<option value="1">판매수량</option>
	</select>
	<input type="text" name="searchTxt" value="${param.searchTxt}"/>
	<input type="button" value="검색 " id="searchBtn"/>
	<input type="button" value="작성 " id="writeBtn"/>
</form>
</div>
<div class="list_wrap">
	<table>
		<colgroup>
			<col width="100px"/>
			<col width="100px"/>
			<col width="100px"/>
			<col width="100px"/>
		</colgroup>
		<thead>
			<tr>
				<th>판매번호</th>
				<th>물품명</th>
				<th>판매수량</th>
				<th>판매날짜</th>
			</tr>
		</thead>
		<tbody></tbody>
	</table>
</div>
<div class="paging_wrap">

</div>
</body>
</html>

kjhtestSEAdd(등록)

<%@ 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>판매물품등록</title>
<script type="text/javascript"
		src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$("#listBtn").on("click",function(){
		$("#goForm").submit();
	});
	
	$("#addBtn").on("click",function(){
		if($.trim($("#sNm").val()) == ""){
			alert("아이템이름을 입력해주세요");$("#sNm").focus();
		} else if($.trim($("#sNb").val()) == ""){
			alert("판매수량을 입력해주세요");
			$("#sNb").focus();
		}	else if($.trim($("#sDt").val()) == ""){
			alert("날짜를 입력해주세요");
			$("#sDt").focus();
		} else{
			var params = $("#addForm").serialize();
			$.ajax({
				url: "kjhtestSEAdds",
				type: "post",
				dataType: "json",
				data: params,
				success: function(res){
					console.log(res);
					if(res.msg == "success"){
						location.href = "kjhtestSEList";
					} else if(res.msg == "failed"){
						alert("등록에 실패하셨습니다.");
					} else{
						alert("에러 발생")
					}
							
				},
				error: function(request, status, error){
					console.log(error);
				}
			});
		}
	}); // add end
	
}); //ready end
</script>
</head>
<body>
<form action="kjhtestSEList" id="goForm" method="post">
	<input type="hidden" name="page" value="${param.page}"/> 
	<input type="hidden" name="searchGbn" value="${param.searchGbn}"/> 
	<input type="hidden" name="searchTxt"	value="${param.searchTxt}"/> 
</form>
<form action="#" id="addForm" method="post">
아이템이름<input type="text" id="sNm" name="sNm"/><br/>
판매수량<input type="number" id="sNb" name="sNb"/><br/>
판매날짜<input type="date" id="sDt" name="sDt"/><br/>
</form>
<input type="button" value="등록" id="addBtn"/>
<input type="button" value="목록으로" id="listBtn"/>
</body>
</html>

kjhtestSEDetail(상세보기,삭제)

<%@ 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>상세보기</title>
<script type="text/javascript"
		src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$("#listBtn").on("click",function(){
		$("#sendForm").attr("action", "kjhtestSEList");
		$("#sendForm").submit();
	}); //list end
	
	$("#updateBtn").on("click",function(){
		$("#sendForm").attr("action", "kjhtestSEUpdate");
		$("#sendForm").submit();
	}); //update end
	
	$("#deleteBtn").on("click",function(){
		if(confirm("삭제하시겠습니까?")){
			var params = $("#sendForm").serialize();
			
			$.ajax({
				url: "kjhtestSEDeletes",
				type: "post",
				dataType: "json",
				data: params,
				success: function(res){
					console.log(res)
					
					if(res.msg == "success"){
						location.href = "kjhtestSEList"						
					} else if(res.msg == "failed"){
						
					
						alert("작성에 실패하였습니다.");
					} else{
						alert("에러가 발생하였습니다.")
					}
				},
				error: function(request, status, error){
						console.log(error)
				}
			});
		}
	}); //delete end
	
}); //ready end
</script>
</head>
<body>
<form action="#" id="sendForm" method="post">
	<input type="hidden" name="sNo" value="${data.SELL_NO}"/>
	<input type="hidden" name="page" value="${param.page}"/>
	<input type="hidden" name="searchGbn" value="${param.searchGbn}"/>
	<input type="hidden" name="searchTxt" value="${param.searchTxt}"/>
</form>
판매번호 : ${data.SELL_NO}<br/>
물품명 : ${data.ITEM_NAME}<br/>
판매수량 : ${data.COUNT}<br/>
판매날짜 : ${data.SELL_DT}<br/>
<input type="button" value="수정" id="updateBtn"/>
<input type="button" value="삭제" id="deleteBtn"/>
<input type="button" value="목록으로" id="listBtn"/>
</body>
</html>

kjhtestSEUpdate(수정)

<%@ 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>
<title>수정</title>
<meta charset="UTF-8">
<script type="text/javascript"
		src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	
	$("#backBtn").on("click",function(){
		history.back();
	});
	
	$("#updateBtn").on("Keypress","input",function(){
		if(event.KeyCode == 13){
			return false;
		}
	}); 
	
	$("#updateBtn").on("click",function(){
		if($.trim($("#sNm").val()) == ""){
			alert("물품명을 입력해주세요");
			$("#sNm").focus();
		}else if($.trim($("#sNb").val()) == ""){
			alert("판매수량을 입력해주세요");
			$("#sNb").focus();
		} else if($.trim($("#sDt").val()) == ""){
			alert("판매날짜를 입력해주세요");
			$("#sDt").focus();
		} else{
			var params = $("#updateForm").serialize();
			
			$.ajax({
				url: "kjhtestASEUpdates",
				type: "post",
				dataType: "json",
				data: params,
				success: function(res){
					console.log(res)
					if(res.msg == "success"){
						$("#updateForm").attr("action","kjhtestSEDetail");
						$("#updateForm").submit();
					} else if(res.msg == "failed" ){
						alert("작성에 실패하였습니다.");
					} else {
						alert("수정 중 에러가 발생하였습니다.");
					}	
				},
				error: function(request, status, error){
						console.log(error);
				}
			});
		}
	});
}); //ready end
</script>
</head>
<body>
<form action="#" id="updateForm" method="post">
<input type="hidden" name="page" value="${param.page}"/> 
<input type="hidden" name="searchGbn" value="${param.searchGbn}"/> 
<input type="hidden" name="searchTxt" value="${param.searchTxt}"/> 
<input type="hidden" name="sNo" value="${data.SELL_NO}"/>
판매번호: ${data.SELL_NO}<br/>
물품명<input type="text" id="sNm" name="sNm" value="${data.ITEM_NAME}"/><br/>
판매수량<input type="number" id="sNb" name="sNb" value="${data.COUNT}"/><br/>
판매날짜<input type="date" id="sDt" name="sDt" value="${data.SELL_DT}"/><br/>
</form>
<input type="button" value="수정" id="updateBtn"/> 
<input type="button" value="뒤로가기" id="backBtn"/> 
</body>
</html>

출력결과

목록

검색

작성

상세보기

수정

삭제

확실히 시험대비 연습하면서 꾸준히연습하니 속도도 빨라지고 흐름이 보이기 시작한다. 조금 더 내가 쓰면서 흐름을 파악하려고 노력하면 조금 더 숙련도가 올라 갈 것같다

profile
호텔리어 출신 비전공자

0개의 댓글