참고자료 : spring 프로젝트 생성 / mybatis연결 / spring+mybatis연결 / Bootstrap
구현내용
- 기존의 데이터 조회, 추가, 수정, 삭제를 포함
- 조회 페이지를 2개로 나누기
-> main.jsp : 성적의 총점, 평균을 구하고 순위를 보여줌
-> admin.jsp : 데이터 추가, 수정, 삭제를 처리- 각 페이지에는 이동할 수 있는 버튼 추가 (메인->관리자 / 관리자->메인)
- 부트스트랩 이용해서 스타일 적용하기
개발환경
언어 : JAVA (JDK 11)
서버 : Apache Tomcat 9.0
프레임워크 : Spring Framework 3.9.18, MyBatis 3.5.8, Bootstrap 5.2.3
DB : OracleXE 11gR2
IDE : Eclipse 2020-12, SQL Developler
admin.jsp에서 '학생추가'버튼이 눌리면
-> GET : 추가데이터를 입력할 폼(insert.jsp)화면으로 넘어감 (insert.do)
-> POST : insert.jsp에서 입력받은 데이터를 받아와서 / 쿼리문으로 넘겨서 실행 / redirect로 admin.jsp화면으로 넘겨줌
@RequestMapping(value="/insert.do", method=RequestMethod.GET)
public String insert() {
return "stu/insert";
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert</title>
<style>
form {margin:10px; width:300px;}
#btn {float:right}
</style>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
</head>
<body>
<form name = "frm" action="insert.do" method="post">
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">번호</span>
<input type="text" name="num" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">이름</span>
<input type="text" name="name" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">국어</span>
<input type="text" name="kor" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">영어</span>
<input type="text" name="eng" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">수학</span>
<input type="text" name="math" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<p><input type="submit" value="추가" class="btn btn-secondary" id="btn"/></p>
</form>
</body>
</html>
<insert id="ins" parameterType="model.StuDTO">
INSERT INTO studentlist(num, name, kor, eng, math)
VALUES(#{num}, #{name, jdbcType=VARCHAR}, #{kor}, #{eng}, #{math})
</insert>
insert("stu.ins", dto)
: "stu.ins"라는 INSERT쿼리문을 실행, dto는 #{파라미터}에 값을 공급할 객체 @Override
public void insertMethod(StuDTO dto) {
sqlSession.insert("stu.ins", dto);
}
@RequestMapping(value="/insert.do", method=RequestMethod.POST)
public String insert(StuDTO dto) {
stuDao.insertMethod(dto);
return "redirect:/admin.do";
}
GET : '수정'버튼을 누르면 update.jsp로 이동 / SELECT쿼리문으로 선택된 num의 데이터값을 가져와서 input value에 보여줌
POST : input으로 받은 데이터를 UPDATE쿼리문으로 넘겨서 실행 / admin.jps로 이동
<select id="one" parameterType="int" resultType="model.StuDTO">
SELECT * FROM studentlist
WHERE num=#{num}
</select>
selectOne(query_id, '조건')
: id에 대한 select문을 실행하면서 조건(쿼리문에서 사용할 인자)를 전달 @Override
public StuDTO updateMethod(int num) {
return sqlSession.selectOne("stu.one", num);
}
addObject()
: "dto"에 stuDao.one(num)리턴값 넣어주기setViewName()
: view로 보여줄 update.jsp와 연결 @RequestMapping(value="/update.do", method=RequestMethod.GET)
public ModelAndView update(int num, ModelAndView mav) {
mav.addObject("dto", stuDao.one(num));
mav.setViewName("stu/update");
return mav;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Update</title>
<style>
form {margin:10px; width:300px;}
#btn {float:right}
</style>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
</head>
<body>
<form name = "frm" action="update.do" method="post">
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">이름</span>
<input type="text" name="name" value="${dto.name}" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">국어</span>
<input type="text" name="kor" value="${dto.kor}" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">영어</span>
<input type="text" name="eng" value="${dto.eng}" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">수학</span>
<input type="text" name="math" value="${dto.math}" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
</div>
<input type="hidden" name = "num" value="${dto.num}"/>
<p><input type="submit" value="수정" class="btn btn-outline-primary" id="btn"/></p>
</form>
</body>
</html>
<update id="upd" parameterType="model.StuDTO">
UPDATE studentlist SET name=#{name}, kor=#{kor}, eng=#{eng}, math=#{math}
WHERE num=#{num}
</update>
@Override
public void updateMethod(StuDTO dto) {
sqlSession.update("stu.upd", dto);
}
@RequestMapping(value="/update.do", method=RequestMethod.POST)
public String update(StuDTO dto) {
stuDao.updateMethod(dto);
return "redirect:/admin.do";
}
'삭제'버튼을 누르면 delete.do가 호출되고, 쿼리문 실행 후 admin.jsp로 이동
<Delete id="del" parameterType="int">
DELETE FROM studentlist
WHERE num=#{num}
</Delete>
@Override
public void deleteMethod(int num) {
sqlSession.delete("stu.del", num);
}
@RequestMapping(value="/delete.do")
public String delete(int num) {
stuDao.deleteMethod(num);
return "redirect:/admin.do";
}