TIL/academy

국비 TIL(Today I Learned) 20220808 Spring 시험, 팀별 프로젝트

토희 2022. 8. 9. 09:18
728x90

어제는(8/8) 아침에 학원에 못 나온 친구들이 많았다

코로나 확진에 등등등 8명이 못 나옴

 

그래서 오전에는 자율 + 팀별 프로젝트를 하라고 하시고, 오후에 셤을 3시간 봄

3시간이라고 했을때, 시험 시간 많이 주네 했는데, 전혀 많이 준게 아니였음

 

한번 오류나니까 초조, 마음 넘 급해서 겨우 시간 맞춰서 냈다. 100점 맞긴 했징!

 

근디 이번 시험은 잘 못 한 친구들도 있었는지 어제는 보강까지 함

나는 보강은 안 듣고 집에갔다

 

어제 비가 많이 오고해서, 침수된 지역도 많아

오늘은(8/9) 11시부터 수업 시작이라고 카톡이 왔는데, 나는 지하철타고 나서 카톡을 봤지....

 

그래서 학원와서 어제꺼 시험에 대해 쓰는중

 

 

시험은 이랬다

 

오라클에 BOOK 테이블을 만들고, 

java, jsp, xml파일 만들어서 데이터 연동시키기


PshExamController.java

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

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

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

import com.spring.sample.web.test.service.ITestService1;

@Controller
public class PshExamController {
	@Autowired
	public ITestService1 iTestService1;

	// book테이블 글 목록
	@RequestMapping(value = "/bookList")
	public ModelAndView bookList(ModelAndView mav) throws Throwable {
		List<HashMap<String, String>> list = iTestService1.getBookList();

		mav.addObject("list", list);
		mav.setViewName("test/bookList");

		return mav;
	}

	// book테이블 글 상세보기
	@RequestMapping(value = "/bookDetail")
	public ModelAndView bookDetail(@RequestParam HashMap<String, String> params, ModelAndView mav) throws Throwable {

		if (params.get("no") == null || params.get("no") == "") {
			mav.setViewName("redirect:bookList");

		} else {
			HashMap<String, String> data = iTestService1.getBook(params);

			mav.addObject("data", data);
			mav.setViewName("test/bookDetail");
		}

		return mav;
	}

	// book테이블 글 추가
	@RequestMapping(value = "/bookInsert")
	public ModelAndView bookInsert(ModelAndView mav) {
		mav.setViewName("test/bookInsert");
		return mav;
	}

	@RequestMapping(value = "/bookRes")
	public ModelAndView bookInsertRes(@RequestParam HashMap<String, String> params, ModelAndView mav) throws Throwable {

		try {
			int cnt = 0;

			switch (params.get("gbn")) {
			case "i":
				cnt = iTestService1.insertBook(params);
				break;
			case "u":
				cnt = iTestService1.updateBook(params);
				break;
			case "d":
				cnt = iTestService1.deleteBook(params);
				break;
			}

			if (cnt > 0) {
				mav.addObject("res", "success");
			} else {
				mav.addObject("res", "failded");
			}
		} catch (Exception e) {
			e.printStackTrace();
			mav.addObject("res", "error");
		}
		mav.setViewName("test/bookRes");
		return mav;
	}

	// book테이블 글 수정페이지
	@RequestMapping(value = "/bookUpdate")
	public ModelAndView sellUpdate(@RequestParam HashMap<String, String> params, ModelAndView mav) throws Throwable {
		// 기존데이터 조회해와야함
		HashMap<String, String> data = iTestService1.getBook(params);
		mav.addObject("data", data);

		mav.setViewName("test/bookUpdate");

		return mav;

	}
}

 

ITestService1.java

package com.spring.sample.web.test.service;

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

public interface ITestService1 {

	public List<HashMap<String, String>> getBookList() throws Throwable;

	public HashMap<String, String> getBook(HashMap<String, String> params) throws Throwable;

	public int insertBook(HashMap<String, String> params) throws Throwable;

	public int updateBook(HashMap<String, String> params) throws Throwable;

	public int deleteBook(HashMap<String, String> params) throws Throwable;

}

 

TestService1.java

package com.spring.sample.web.test.service;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.spring.sample.web.test.dao.ITestDao1;

@Service
public class TestService1 implements ITestService1 {
	@Autowired
	public ITestDao1 iTestDao1;

	@Override
	public List<HashMap<String, String>> getBookList() throws Throwable {
		return iTestDao1.getBookList();
	}

	@Override
	public HashMap<String, String> getBook(HashMap<String, String> params) throws Throwable {
		return iTestDao1.getBook(params);
	}

	@Override
	public int insertBook(HashMap<String, String> params) throws Throwable {
		return iTestDao1.insertBook(params);
	}

	@Override
	public int updateBook(HashMap<String, String> params) throws Throwable {
		return iTestDao1.updateBook(params);
	}

	@Override
	public int deleteBook(HashMap<String, String> params) throws Throwable {
		return iTestDao1.deleteBook(params);
	}
}

 

ITestDao1.java

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

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

public interface ITestDao1 {

	public List<HashMap<String, String>> getBookList() throws Throwable;

	public HashMap<String, String> getBook(HashMap<String, String> params) throws Throwable;

	public int insertBook(HashMap<String, String> params) throws Throwable;

	public int updateBook(HashMap<String, String> params) throws Throwable;

	public int deleteBook(HashMap<String, String> params) throws Throwable;

}

 

TestDao1.java

package com.spring.sample.web.test.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 TestDao1 implements ITestDao1 {
	@Autowired
	public SqlSession sqlSession;

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

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

	@Override
	public int insertBook(HashMap<String, String> params) throws Throwable {
		return sqlSession.insert("test.insertBook", params);
	}

	@Override
	public int updateBook(HashMap<String, String> params) throws Throwable {
		return sqlSession.update("test.updateBook", params);
	}

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

}

 

Test_SQL.xml

<?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">
<!-- namespace : 클래스와 동일, 이 파일의 대표명 -->
<mapper namespace="test">
	
	<select id="getBookList" resultType="hashmap">
		SELECT BOOK_NO, BOOK_TITLE, BOOK_AUTHOR
		FROM BOOK
	</select>
	
	<select id="getBook" resultType="hashmap" parameterType="hashmap">
		SELECT BOOK_NO, BOOK_TITLE, BOOK_AUTHOR, BOOK_CO,
		TO_CHAR(BOOK_DT,'YYYY-MM-DD') AS BOOK_DT, TO_CHAR(REG_DT,'YYYY-MM-DD') AS REG_DT
		FROM BOOK
		WHERE BOOK_NO = #{no}
	</select>
	
	<insert id="insertBook" parameterType="hashmap">
		INSERT INTO BOOK(BOOK_NO, BOOK_TITLE, BOOK_AUTHOR, BOOK_CO, BOOK_DT)
		VALUES(BOOK_SEQ.NEXTVAL, #{bookTitle}, #{bookAuthor}, #{bookCo}, #{bookDt})
	</insert>
	
	<delete id="deleteBook" parameterType="hashmap">
		DELETE FROM BOOK
		WHERE BOOK_NO = #{no}
	</delete>
	       
	<update id="updateBook" parameterType="hashmap">
			UPDATE BOOK SET BOOK_TITLE = #{bookTitle},
                BOOK_AUTHOR = #{bookAuthor},
                BOOK_CO = #{bookCo},
                BOOK_DT = #{bookDt}
                WHERE BOOK_NO = #{no}
	</update>
	
</mapper>

 

bookList.jsp

<%@ 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>
<style type="text/css">
table{
	border-collapse: collapse;
}

th, td {
	border: 1px solid #000;
	padding: 5px;
}

</style>
<script type="text/javascript" src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	$("tbody").on("click", "tr", function () {
		console.log($(this).attr("no"));
		$("#no").val($(this).attr("no"));
		
		$("#actionForm").submit();
	})
	
	$("#insertBtn").on("click", function () {
		location.href = "bookInsert";
	});
});

</script>
</head>
<body>
<form action="bookDetail" id="actionForm" method="post">
	<input type="hidden" id="no" name="no" /> 
</form>
<input type="button" value="추가" id="insertBtn" />
<br />
<table>
	<thead>
		<tr>
			<th>책번호</th>
			<th>책제목</th>
			<th>저자</th>
		</tr>
	</thead>
	<tbody>
		<c:forEach var="data" items="${list}">
			<tr no="${data.BOOK_NO}">
				<td>${data.BOOK_NO}</td>
				<td>${data.BOOK_TITLE}</td>
				<td>${data.BOOK_AUTHOR}</td>
			</tr>
		</c:forEach>
	</tbody>
</table>
</body>
</html>

 

bookDetail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" 
		src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	
	$("#btnWrap").on("click", "input", function(){
		if($(this).attr("id") != "deleteBtn" ||
			($(this).attr("id") == "deleteBtn" && confirm("삭제하시곘습니까?"))){
			$("#actionForm").attr("action", $(this).attr("loc"));
			$("#actionForm").submit();
		}
	})
});

</script>
</head>
<body>
<form action="#" id="actionForm" method="post">
	<input type="hidden" name="gbn" value="d">
	<input type="hidden" name="no" value="${data.BOOK_NO}">
</form>	
책제목: ${data.BOOK_TITLE}<br/>
저자: ${data.BOOK_AUTHOR}<br/>
출판사: ${data.BOOK_CO}<br/>
출판일: ${data.BOOK_DT}<br/>
등록일: ${data.REG_DT}<br/>
<div id="btnWrap">
	<input type="button" value="수정" id="updateBtn" loc="bookUpdate" /> 
	<input type="button" value="삭제" id="deleteBtn" loc="bookRes"/>
	<input type="button" value="목록" id="listBtn" loc="bookList" />
</div>
</body>
</html>

 

 

bookInsert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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 () {
		history.back();
	});
	
	$("#insertBtn").on("click", function () {
		if($("#bookTitle").val() == ""){
			alert("책제목을 입력하세요");
			$("#bookTitle").focus();
		} else if($("#bookAuthor").val() == ""){
			alert("저자를 입력하세요");
			$("#bookAuthor").focus();
		} else if($("#bookCo").val() == ""){
			alert("출판사를 입력하세요");
			$("#bookCo").focus();
		}else if($("#bookDt").val() == ""){
			alert("출판일을 입력하세요");
			$("#bookDt").focus();
		}else {
			$("#actionForm").submit();
		}
	});
});

</script>
</head>
<body>
<form action="bookRes" id="actionForm" method="post">
<!-- gbn : 구분, 혹은 flag -->
<!-- 구분: i - insert, u - update, d - delete -->
<input type="hidden" name="gbn" value="i"/>
책제목 <input type="text" name="bookTitle" id="bookTitle"/>
<br />
저자 <input type="text" name="bookAuthor" id="bookAuthor" />
<br />
출판사 <input type="text" name="bookCo" id="bookCo"/>
<br />
출판일 <input type="date" name="bookDt" id="bookDt" />
</form>
<input type="button" value="등록" id="insertBtn">
<input type="button" value="목록" id="listBtn">
</body>
</html>

 

bookRes.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="resources/script/jquery/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	
	switch("${res}"){
	case "success" : 
		if("${param.gbn}" == "u"){ 
			$("#goForm").submit();
		} else {
			location.href = "bookList" 
		}
		break;
	case "failed" : 
		alert("작업에 실패하였습니다.");
		history.back();
		break;
	case "error" : 
		alert("작업중 문제가 발생 하였습니다.");
		history.back();
		break;
	}
});
</script>
</head>
<body>
<form action="bookDetail" id="goForm" method="post">
	<input type="hidden" name="no" value="${param.no}" /> 
</form>
</body>
</html>

 

bookUpdate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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 () {
		history.back();
	});
	
	$("#updateBtn").on("click", function () {
		if($("#bookTitle").val() == ""){
			alert("책제목을 입력하세요");
			$("#bookTitle").focus();
		} else if($("#bookAuthor").val() == ""){
			alert("저자를 입력하세요");
			$("#bookAuthor").focus();
		} else if($("#bookCo").val() == ""){
			alert("출판사를 입력하세요");
			$("#bookCo").focus();
		}else if($("#bookDt").val() == ""){
			alert("출판일을 입력하세요");
			$("#bookDt").focus();
		}else {
			$("#actionForm").submit();
		}
	});
});

</script>
</head>
<body>
<form action="bookRes" id="actionForm" method="post">
<input type="hidden" name="gbn" value="u"/>
<input type="hidden" name="no" value="${data.BOOK_NO}"/>
책제목 <input type="text" name="bookTitle" id="bookTitle" value="${data.BOOK_TITLE}"/>
<br />
저자 <input type="text" name="bookAuthor" id="bookAuthor" value="${data.BOOK_AUTHOR}"/>
<br />
출판사 <input type="text" name="bookCo" id="bookCo" value="${data.BOOK_CO}"/>
<br />
출판일 <input type="date" name="bookDt" id="bookDt" value="${data.BOOK_DT}"/>
<br/>
</form>
<input type="button" value="수정" id="updateBtn">
<input type="button" value="뒤로가기" id="listBtn">
</body>
</html>

 

 

내가 시험 볼때 떴던 오류는....

 

뭐라고 떴는지는 기억이 안나고, 

1. service.java에 어노테이션 안 붙여서 오류났었고,

2. bookUpdate.jsp에서 form의 경로를 잘못 입력해줘서....

 

경로를 잘 보면서 하자!

 

 

아니 근데, import 할때, import한 내용이 사라지지?

@하면은 어제 시험 볼때는 import한 내용이 있었는데, 지금 보니 사라져 있네

이런것들,  있던 파일에 어노테이션 지우고 다시 붙여도 import내용이 안떠서

예를 보여주기 위해 파일을 새로 만듬

 

왜지??!!!!!

 

난 바보였다..

 

감춰져 있는거였음

+버튼 클릭하면 나타남....

 

 

 

 

오늘은 8/10일임

나는 또 바보였다

저번에 시험에서 쓴 코드를 복붙해서 쓸려다가 이상한게 있었음

Controller부분에

왜 bookUpdate부분에 public ModelAndView sellUpdate.... sell이 왜있어!

bookUpdate이여야 했는데, 근데 화면은 잘 작동됨, 저 이름부분은.... 다른곳이랑 연결된곳이 없나

728x90