(4-2 完) [mybatis] 학생관리 프로그램 만들기 (추가, 수정, 삭제)

씩씩한 조약돌·2023년 1월 26일
0

미니프로젝트🤹

목록 보기
12/21

학생관리 프로그램

참고한 게시글
mybatis연결
DB 연동
③ 외부게시글 (SQL Mapper 작성 방법)

개발환경

언어 : JAVA (JDK 11)
서버 : Apache Tomcat 9.0
프레임워크 : MyBatis 3.5.8
DB : OracleXE 11gR2
IDE : Eclipse 2020-12, SQL Developler


3 추가(INSERT)

1. insert 화면 구현 : stuInsert.jsp

WebContent - views 폴더 - stuInsert.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert</title>
</head>
<body>
	<form action ='' method='post'>
		<table>
			<tr>
				<th>번호</th>
				<td> <input type="text" name ="num" /> </td>
			</tr>
			<tr>
				<th>이름</th>
				<td> <input type="text" name ="name" /> </td>
			</tr>
			
			<tr>
				<th>국어</th>
				<td> <input type="text" name ="kor" /> </td>
			</tr>
	
			<tr>
				<th>영어</th>
				<td> <input type="text" name ="eng" /> </td>
			</tr>
			
			<tr>
				<th>수학</th>
				<td> <input type="text" name ="math" /> </td>
			</tr>		
			
			<tr>
				<td colspan="2"> <input type="submit" name ="수정" /> </td>
			</tr>
		</table>
	</form>
</body>
</html>

2. '학생추가' 버튼 누르면 insert.jsp로 이동 (GET) : StuController클래스

controller 패키지 - StuInsertController클래스 생성

  • extends HttpServlet

  • @WebServlet("/stuInsert")

  • StuService 변수 생성

  • 기본생성자 : StuService 객체 생성

  • doGet() 오버라이드 : stuInsert.jsp로 이동

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/stuInsert")
public class StuInsertController extends HttpServlet{

	private StuService service;
	
	public StuInsertController() {
		service = new StuService();
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String path = "/views/stuInsert.jsp";
		RequestDispatcher dis = req.getRequestDispatcher(path);
		dis.forward(req, resp);
	}//doGet()
	
}//class StuInsertController

3. 중간확인


4. insert.jsp에서 입력받은 값 가져오기(POST) : StuController클래스

  • doPost() 오버라이딩
  • req.setCharacterEncoding("UTF-8"); : post방식으로 데이터 받을 때 한글깨짐 방지
  • insert.jsp에서 받은 값을 req.getParameter()로 받아오기
  • StuDTO객체에 넣어줌
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		
		int num = Integer.parseInt(req.getParameter("num"));
		String name = req.getParameter("name");
		int kor = Integer.parseInt(req.getParameter("kor"));
		int eng = Integer.parseInt(req.getParameter("eng"));
		int math = Integer.parseInt(req.getParameter("math"));
		
		StuDTO dto = new StuDTO();
		dto.setNum(num);
		dto.setName(name);
		dto.setKor(kor);
		dto.setEng(eng);
		dto.setMath(math);
		
	}//doPost()

5. INSERT쿼리문 추가 : stuMapper.xml

  • parameterType : 해당 속성에 지정한 객체의 프로퍼티값이 SQL문의 입력 파라미터에 지정
	<insert id = "ins" parameterType="dto.StuDTO">
		INSERT INTO studentlist(num, name, kor, eng, math)
		VALUES(#{num}, #{name}, #{kor}, #{eng}, #{math})
	</insert>

6. SqlSession - 쿼리문 연결 : StuDAO클래스

  • setInsertMethod() 추가
  • insert("stu.ins", dto) : "stu.ins"라는 INSERT쿼리문을 실행, dto는 파라미터에 값을 공급할 객체
	public int setInsertMethod(SqlSession sqlSession, StuDTO dto) {
		return sqlSession.insert("stu.ins", dto);
	}

7. 쿼리문 실행 : StuService클래스

setInsertProcess() 추가

  • 매개변수 : dto
  • sqlSession = (Connection) 오라클 드라이버 연결한 SqlSession객체 넣어주기
  • 성공하면 commit(), 실패하면 rollback(), 끝나면 close()
  • 쿼리문 실행 후 리턴값으로 int chk를 받아옴
	public int setInsertProcess(StuDTO dto) {
		
		int chk =0;
		SqlSession sqlSession = null;
		
		try {
			sqlSession = SqlSessionTemplate.getSqlSession();
			chk = dao.setInsertMethod(sqlSession, dto);
			sqlSession.commit();
			
		} catch (Exception e) {
			System.out.println(e.toString());
			sqlSession.rollback();
		} finally {
			sqlSession.close();
		}
		
		return chk;
	}//setInsertProcess()

8. insert.jsp에서 입력받은 값 넘기기(POST) : StuController클래스

  • service.setInsertProcess(dto); : 쿼리문 실행
  • resp.sendRedirect("stuList"); : stuList.jsp 로 이동
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		
		int num = Integer.parseInt(req.getParameter("num"));
		String name = req.getParameter("name");
		int kor = Integer.parseInt(req.getParameter("kor"));
		int eng = Integer.parseInt(req.getParameter("eng"));
		int math = Integer.parseInt(req.getParameter("math"));
		
		StuDTO dto = new StuDTO();
		dto.setNum(num);
		dto.setName(name);
		dto.setKor(kor);
		dto.setEng(eng);
		dto.setMath(math);
		
		service.setInsertProcess(dto);
		resp.sendRedirect("stuList");
		
	}//doPost()

9. 실행


4 수정(UPDATE)

1. insert 화면 구현 : stuUpdate.jsp

WebContent - views 폴더 - stuUpdate.jsp 생성

  • input창에 기본값 받아오기
  • num의 데이터값은 필요하지만 화면에 노출시킬 필요는 없어서 hidden
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Update</title>
</head>
<body>
<form action ='stuUpdate' method='post'>
		<table>
			<tr>
				<th>이름</th>
				<td> <input type="text" name ="name" value='${dto.name}'/> </td>
			</tr>
			
			<tr>
				<th>국어</th>
				<td> <input type="text" name ="kor" value='${dto.kor}'/> </td>
			</tr>
	
			<tr>
				<th>영어</th>
				<td> <input type="text" name ="eng" value='${dto.eng}'/> </td>
			</tr>
			
			<tr>
				<th>수학</th>
				<td> <input type="text" name ="math" value='${dto.math}'/> </td>
			</tr>			
		
			<tr>
				<td colspan="2"> 
				<input type='hidden' name='num' value="${dto.num}" />
				<input type="submit" name ="commit" value="수정"/> </td>
			</tr>
		</table>
	</form>
</body>
</html>

2. '수정'버튼 누르면 update.jsp로 이동(GET) : StuUpdateController 클래스

controller 패키지 - StuUpdateController 클래스 생성

  • @WebServlet("/memUpdate")
  • extends HttpServlet
  • StuService 변수 생성
  • 기본생성자 : StuService 객체 생성
  • doGet() 오버라이드
    -> req.setAttribute("dto",dto) : parmeter값을 dto객체에 넣어서 넘겨줌 -> stuUpdate.jsp에서 input요소의 value로 들어가 기본값을 표현해주기 위함
    -> GET방식의 호출이 오면 stuUpdate.jsp로 화면을 넘겨줌
package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dto.StuDTO;

@WebServlet("/stuUpdate")
public class StuUpdateController extends HttpServlet{
	
	private StuService service;
	
	public StuUpdateController() {
		service = new StuService();
	}
    
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		
		int num = Integer.parseInt(req.getParameter("num"));
		String name = req.getParameter("name");
		int kor = Integer.parseInt(req.getParameter("kor"));
		int eng = Integer.parseInt(req.getParameter("eng"));
		int math = Integer.parseInt(req.getParameter("math"));
		
		StuDTO dto = new StuDTO();
		dto.setNum(num);
		dto.setName(name);
		dto.setKor(kor);
		dto.setEng(eng);
		dto.setMath(math);
		
		req.setAttribute("dto", dto);
		
		String path ="/views/stuUpdate.jsp";
		RequestDispatcher dis = req.getRequestDispatcher(path);
		dis.forward(req, resp);
	}//doGet()
	
}//class StuUpdateController

3. 실행

4. input요소에 입력된 값을 받아옴(POST) : StuUpdateController 클래스

  • doPost() 오버라이드
    -> input요소에 입력된 값을 전부 받아옴
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		
		int num = Integer.parseInt(req.getParameter("num"));
		String name = req.getParameter("name");
		int kor = Integer.parseInt(req.getParameter("kor"));
		int eng = Integer.parseInt(req.getParameter("eng"));
		int math = Integer.parseInt(req.getParameter("math"));
		
		StuDTO dto = new StuDTO();
		dto.setNum(num);
		dto.setName(name);
		dto.setKor(kor);
		dto.setEng(eng);
		dto.setMath(math);
	}//doPost()

5. UPDATE 쿼리문 작성 : StuMapper.xml

	<update id = "upd" parameterType="dto.StuDTO">
		UPDATE studentlist set name=#{name}, kor=#{kor}, eng=#{eng}, math=${math}
		WHERE num=#{num}
	</update>

6. 쿼리문-SqlSession 연결 : StuDAO 클래스

	public int setUpdateMethod(SqlSession sqlSession, StuDTO dto) {
		return sqlSession.update("stu.upd", dto);
	}

7. SqlSession 실행 : StuService클래스

	public int setUpdateProcess(StuDTO dto) {
		
		int chk = 0;
		SqlSession sqlSession = null;
		
		try {
			sqlSession = SqlSessionTemplate.getSqlSession();
			chk = dao.setUpdateMethod(sqlSession, dto);
			
			sqlSession.commit();
		} catch (Exception e) {
			System.out.println(e.toString());
			sqlSession.rollback();
		} finally {
			sqlSession.close();
		}
		
		return chk;
	}//setUpdateProcess()

8. input요소로 받아온 값을 넘겨줌(POST) : StuUpdateController 클래스

  • service.setUpdateProcess(dto); : 쿼리문 실행
  • resp.sendRedirect("stuList"); : stuList.jsp 로 이동
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		
		int num = Integer.parseInt(req.getParameter("num"));
		String name = req.getParameter("name");
		int kor = Integer.parseInt(req.getParameter("kor"));
		int eng = Integer.parseInt(req.getParameter("eng"));
		int math = Integer.parseInt(req.getParameter("math"));
		
		StuDTO dto = new StuDTO();
		dto.setNum(num);
		dto.setName(name);
		dto.setKor(kor);
		dto.setEng(eng);
		dto.setMath(math);
		
		service.setUpdateProcess(dto);
		resp.sendRedirect("stuList");
		
	}//doPost()

9. 실행


5 삭제(DELETE)

1. DELETE 쿼리문 추가 : StuMapper.xml

	<delete id = "del" parameterType="dto.StuDTO">
		DELETE FROM studentlist
		WHERE num=#{num}
	</delete>

2. 쿼리문-SqlSession 연결 : StuDAO 클래스

	public int setDeleteMethod(SqlSession sqlSession, int num) {
		return sqlSession.delete("stu.del", num);
	}

3. sqlSession 실행 : StuService 클래스

	public int setDeleteProcess(int num) {
		
		int chk =0;
		SqlSession sqlSession = null;
		
		try {
			sqlSession = SqlSessionTemplate.getSqlSession();
			chk = dao.setDeleteMethod(sqlSession, num);
			
			sqlSession.commit();			
		} catch (Exception e) {
			System.out.println(e.toString());
			sqlSession.rollback();
		} finally {
			sqlSession.close();
		}
		
		return chk;
	}//setDeleteProcess()

4. 삭제버튼 누르면 num값 받아서 쿼리문으로 넘겨주기(GET) : StuDeleteController클래스 생성

package controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.StuService;

@WebServlet("/stuDelete")
public class StuDeleteController extends HttpServlet{

	private StuService service;
	
	public StuDeleteController() {
		service = new StuService();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		int num = Integer.parseInt(req.getParameter("num"));
		service.setDeleteProcess(num);
		resp.sendRedirect("stuList");
	}
	
}//class StuDeleteController

5. 실행

profile
씩씩하게 공부중 (22.11~)

0개의 댓글