75일차_Spring

서창민·2023년 6월 27일
0

Spring

목록 보기
6/15
post-thumbnail

23.06.27 화 75일차

Spring

  • 비즈니스 컴포넌트 로딩
2-Layered 아키텍처 스타일이라고도 한다.
web.xml

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>
  • RowMapper와 어노테이션을 활용한 게시판 만들기
ExamVO

package com.jungbo.k1.exam;

import lombok.Data;

@Data
public class ExamVO {
	private String ch1;
	private String ch2;
	private String sno;
	private String sname;
	private int kor;
	private int eng;
	private int math;
	private int hist;
}
ExamSerivce & ExamDao

package com.jungbo.k1.exam;

import java.util.List;

public interface ExamService {
	void inserExam(ExamVO vo);
	void updateExam(ExamVO vo);
	void deletExam(ExamVO vo);
	ExamVO getExam(ExamVO vo);
	List<ExamVO> getExamList(ExamVO vo);
}
ExamServiceImpl

package com.jungbo.k1.exam;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ExamServiceImpl implements ExamService{
	
	@Autowired
	private ExamDao dao;
	
	@Override
	public List<ExamVO> getExamList(ExamVO vo) {
		return dao.getExamList(vo);
	}

	@Override
	public void inserExam(ExamVO vo) {
		dao.inserExam(vo);
	}

	@Override
	public void updateExam(ExamVO vo) {
		dao.updateExam(vo);
	}

	@Override
	public void deletExam(ExamVO vo) {
		dao.deletExam(vo);
	}

	@Override
	public ExamVO getExam(ExamVO vo) {
		return dao.getExam(vo);
	}

}
ExamDaoImpl

package com.jungbo.k1.exam;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class ExamDaoImpl implements ExamDao{

	@Autowired
	private JdbcTemplate jdbcTemplate; 

	String SELECT_ALL = "select * from Examtbl order by sno desc";
	String SELECT_SNO = "select * from Examtbl where sno like ? order by sno desc";
	String SELECT_SNAME = "select * from Examtbl where sname like ? order by sno desc";
	String INSERT = "insert into Examtbl(sno, sname, kor, eng, math, hist)"
			+ " values(?,?,?,?,?,?)";
	String UPDATE = "update Examtbl set sname=?, kor=? , eng=?, math=?, hist=? where sno=?";
	String DELETE = "DELETE FROM Examtbl WHERE sno=?";
	String SELECT_ONE = "select * from Examtbl where sno=?";
	
	@Override
	public List<ExamVO> getExamList(ExamVO vo) {
		if(vo.getCh1()==null || vo.getCh2()=="" || vo.getCh2().equals("")) {
			return jdbcTemplate.query(SELECT_ALL, new ExamRowMapper());	
		}else if(vo.getCh1().equals("sno")) {
			Object args[] = {"%" + vo.getCh2() +"%"};
			return jdbcTemplate.query(SELECT_SNO, new ExamRowMapper(), args);	
		}else if(vo.getCh1().equals("sname")) {
			Object args[] = {"%" + vo.getCh2() +"%"};
			return jdbcTemplate.query(SELECT_SNAME, new ExamRowMapper(), args);	
		}
		return null;
		
	}

	@Override
	public void inserExam(ExamVO vo) {
		Object args[] = {vo.getSno(), vo.getSname(),vo.getKor(),vo.getEng(),vo.getMath(),vo.getHist()};
		jdbcTemplate.update(INSERT, args);
	}

	@Override
	public void updateExam(ExamVO vo) {
		Object args[] = {vo.getSname(),vo.getKor(),vo.getEng(),vo.getMath(),vo.getHist(), vo.getSno()};
		jdbcTemplate.update(UPDATE, args);
	}

	@Override
	public void deletExam(ExamVO vo) {
		Object args[] = {vo.getSno()};
		jdbcTemplate.update(DELETE, args);
	}

	@Override
	public ExamVO getExam(ExamVO vo) {
		Object args[] = {vo.getSno()};
		return jdbcTemplate.queryForObject(SELECT_ONE, new ExamRowMapper(), args);
	}
}
ExamRowMapper

package com.jungbo.k1.exam;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

public class ExamRowMapper implements RowMapper<ExamVO>{

	@Override
	public ExamVO mapRow(ResultSet rs, int rowNum) throws SQLException {
		ExamVO m = new ExamVO();
		m.setSno(rs.getString("sno"));
		m.setSname(rs.getString("sname"));
		m.setKor(rs.getInt("kor"));
		m.setEng(rs.getInt("eng"));
		m.setMath(rs.getInt("math"));
		m.setHist(rs.getInt("hist"));
		return m;
	}
}
ExamController

package com.jungbo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.jungbo.k1.exam.ExamServiceImpl;
import com.jungbo.k1.exam.ExamVO;

@Controller
public class ExamController {
	
	@Autowired
	private ExamServiceImpl service;
	
	@RequestMapping(value="getExamList.do")
	public ModelAndView getExamList(ExamVO vo, ModelAndView mav) {
		mav.addObject("li",service.getExamList(vo));
		mav.setViewName("/exam/getExamList.jsp");
		return mav;
	}
	
	@RequestMapping(value="/getExam.do")
	public ModelAndView getExam(ExamVO vo, ModelAndView mav) {
		mav.addObject("m",service.getExam(vo));
		mav.setViewName("/exam/edit.jsp");
		return mav;
	}
	
	@RequestMapping(value="/insertExam.do")
	public String insertExam(ExamVO vo) {
		service.inserExam(vo);
		return "getExamList.do";
	}
	
	@RequestMapping(value="/updateExam.do")
	public String updateExam(ExamVO vo) {
		service.updateExam(vo);
		return "getExamList.do";
	}
	
	@RequestMapping(value="/deleteExam.do")
	public String deleteExam(ExamVO vo) {
		service.deletExam(vo);
		return "getExamList.do";
	}
}
jsp 파일

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.jungbo.k1.exam.*" %>
<%@ page import="java.util.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ include file="/include/top.jsp" %>
<section>
    <br>
    <div align="center">
        <h2>학생 성적 처리 조회</h2>
        <table border=1>
            <tr>
                <td>학번</td>
                <td>이름</td>
                <td>국어</td>
                <td>영어</td>
                <td>수학</td>
                <td>역사</td>
                <td>합계</td>
                <td>평균</td>
            </tr>
            <c:forEach items="${li}" var="m">
                <tr>
                    <td>
                        <a href="<%=path %>/getExam.do?sno=${m.sno}">
                            ${m.sno}
                        </a>
                    </td>
                    <td>${m.sname}</td>
                    <td>${m.kor}</td>
                    <td>${m.eng}</td>
                    <td>${m.math}</td>
                    <td>${m.hist}</td>
                    <td>${m.kor + m.eng + m.math + m.hist}</td>
                    <td>${(m.kor + m.eng + m.math + m.hist)/4}</td>
                </tr>
            </c:forEach>
        </table>
        <form action="<%=path %>/getExamList.do">
            <table>
                <tr>
                    <td colspan=5 align="center">
                        <select name="ch1">
                            <option value="sno">학번</option>
                            <option value="sname">이름</option>
                        </select>
                        <input name="ch2" type="text">
                        <input type="submit" value="검색">
                    </td>
                </tr>
            </table>
        </form>
    </div>
</section>
<%@ include file="/include/footer.jsp" %>

--------------------------------------------------------------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import ="com.jungbo.k1.exam.*" %>
<%@page import ="java.util.*" %>
<%@ include file = "/include/top.jsp" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
	<h2>성적 입력</h2>
		<hr>
			<form action="<%=path %>/insertExam.do">
				<table border=1>
					<tr>
						<td>번호</td>
						<td><input type=text name=sno></td>
					</tr>
					<tr>
						<td>이름</td>
						<td><input type=text name=sname></td>
					</tr>
					<tr>
						<td>국어</td>
						<td><input type=text name=kor></td>
					</tr>
					<tr>
						<td>영어</td>
						<td><input type=text name=eng></td>
					</tr>
					<tr>
						<td>수학</td>
						<td><input type=text name=math></td>
					</tr>
					<tr>
						<td>역사</td>
						<td><input type=text name=hist></td>
					</tr>
					<tr>
						<td colspan=2 align=center>
						<input type=submit value="저장하기">
					</td>
					</tr>
				</table>
			</form>
</div>
</body>
</html>


--------------------------------------------------------------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import ="com.jungbo.k1.exam.*" %>
<%@page import ="java.util.*" %>
<%@ include file = "/include/top.jsp" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
	<h2>성적 상세 보기</h2>
		<hr>
			<form action="<%=path %>/updateExam.do">
				<table border=1>
					<tr>
						<td>번호</td>
						<td><input type=text name=sno value="${m.sno}"></td>
					</tr>
					<tr>
						<td>이름</td>
						<td><input type=text name=sname value="${m.sname}"></td>
					</tr>
					<tr>
						<td>국어</td>
						<td><input type=text name=kor value="${m.kor}"></td>
					</tr>
					<tr>
						<td>영어</td>
						<td><input type=text name=eng value="${m.eng}"></td>
					</tr>
					<tr>
						<td>수학</td>
						<td><input type=text name=math value="${m.math}"></td>
					</tr>
					<tr>
						<td>역사</td>
						<td><input type=text name=hist value="${m.hist}"></td>
					</tr>
					<%-- <tr>
						<td>합계</td>
						<td><input type=text name=sum value="${m.kor + m.eng + m.math + m.hist}"></td>
					</tr>
					<tr>
						<td>평균</td>
						<td><input type=text name=avg value="${(m.kor + m.eng + m.math + m.hist)/4}"></td>
					</tr>--%>
					<tr> 
						<td colspan=2 align=center>
						<input type=submit value="수정하기">
					</td>
					</tr>
				</table>
			</form>
		<br>
	<hr>
&emsp; <a href="<%=path %>/exam/exam.jsp">글등록</a>
&emsp; <a href="<%=path %>/deleteExam.do?sno=${m.sno}">글삭제</a>
&emsp; <a href="<%=path %>/getExamList.do">글목록</a>
</div>
</body>
</html>

Mapping을 통해 불러와 사용할 수 있고,
경로가 가장 중요하다.
어디서 어디로 호출이되는지를 흐름을 잘 이해하고
오타를 줄이도록 하자!

profile
Back-end Developer Preparation Students

0개의 댓글