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>
출력결과
목록
검색
작성
상세보기
수정
삭제
확실히 시험대비 연습하면서 꾸준히연습하니 속도도 빨라지고 흐름이 보이기 시작한다. 조금 더 내가 쓰면서 흐름을 파악하려고 노력하면 조금 더 숙련도가 올라 갈 것같다