JSP 프로그래밍: 모델1 방식의 웹 개발하기(갤러리 만들기) - 2
셋팅: 이클립스 EE, 톰캣 ,마이바티스 ,오라클 , SQL gate
=> 마이바티스를 추가하여 ! 모델1 방식의 웹 갤러리 만들어보기
* 디자인에 소질이 없는 고로... 제 포스팅에서 디자인은 버리고 백엔드 코드만 봐주시길 ㅠㅠ
마이바티스 ( SQL - DB작업을 수월하게 해줌 )
Mybatis 마이바티스 다운로드 및 환경 설정 (tistory.com)
Mybatis 마이바티스 다운로드 및 환경 설정
** 아래 포스팅의 예제 => model 1 타입의 게시판 사이트를 제작한 후, 그걸 복사해와서 마이바티스를 테스트 해보는 포스팅 입니다. ** 아래 모델1방식으로 웹 게시판 만들기 JSP 프로그래밍: 모델1
jangmicoding.tistory.com
저번에 포스팅했던 게시판 만들기 예제에 이어서 만드는 포스팅입니다. (안봐도 무관)
JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 1 FBoard (tistory.com)
JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 1 FBoard
*Model 1 방식: JSP 프로그래밍에서 Model과 View를 따로 분리하지 않고 같이 섞어서 개발하는 방식이다. => UI(디자인)와 비즈니스 로직을 함께 처리하는 방식이라 코드의 재사용성이 떨어진다 => 유지
jangmicoding.tistory.com
JSP 프로그래밍: 모델1 방식의 웹 개발하기(갤러리 만들기) - 1 (tistory.com)
JSP 프로그래밍: 모델1 방식의 웹 개발하기(갤러리 만들기) - 1
셋팅: 이클립스 EE, 톰캣 ,마이바티스 ,오라클 , SQL gate => 마이바티스를 추가하여 ! 모델1 방식의 웹 갤러리 만들어보기 * 디자인에 소질이 없는 고로... 제 포스팅에서 디자인은 버리고 백엔드 코
jangmicoding.tistory.com
갤러리- 게시물 상세보기에 이어 갤러리 수정/ 삭제를 구현해보자!
- fboard 예제와는 다르게 이 예제의 테이블, VO에는 비밀번호가 없다 ㅠㅠㅠㅠ 까묵었네 그냥 하자
비번 체크 생략 ~ ! 이걸 생략해버리니 훨씬 간단해진다.
1. 게시물 삭제처리하기
A chk.jsp 작성 ( 폼 아님 => num과 job 파라미터를 받아서 job이 up이면 수정 페이지, del이면 삭제 페이지로 가도록 하기)
<%@page import="vo.PororoVO"%>
<%@page import="dao.PororoDao"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
int num = Integer.parseInt(request.getParameter("num"));
String job = request.getParameter("job");
System.out.println("기본키 파라미터:" + num);
System.out.println("기본키 파라미터:" + job);
PororoVO vo = new PororoVO();
vo.setNum(num);
%>
<%--<div style="width: 300px; margin: auto; background: orange;">
<p>정말 삭제하실 건가요?</p>
<a href="detail.jsp?num=<%=num%>">아니요</a>
</div> --%>
<%
if (job.equalsIgnoreCase("del")) {
response.sendRedirect("delete.jsp?num="+num);
} else if (job.equalsIgnoreCase("up")) {
response.sendRedirect("modify.jsp?num="+num);
}
System.out.println("기본키 파라미터2:" + num);
System.out.println("기본키 파라미터2:" + job);
%>
B dao가서 메소드 구현
package dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import factory.FactoryService;
import vo.PororoVO;
public class PororoDao {
private static PororoDao dao;
private PororoDao() { //단축키
}
//싱글톤
public synchronized static PororoDao getDao() {
if(dao == null) {
dao= new PororoDao();
}
return dao;
}
public void addFBoard(PororoVO vo) {
SqlSession ss = FactoryService.getFactory().openSession();
ss.insert("pororo.add",vo);
ss.commit();
ss.close();
}//addfbo
public List<PororoVO> listFBoard() {
SqlSession ss = FactoryService.getFactory().openSession();
List<PororoVO> volist =ss.selectList("pororo.list");
ss.commit();
ss.close();
return volist;
}//listbo
public PororoVO detailFBoard(int num) {
SqlSession ss = FactoryService.getFactory().openSession();
PororoVO vo= ss.selectOne("pororo.detail",num);
ss.commit();
ss.close();
return vo;
}
public void deleteFBoard(int num) {
SqlSession ss = FactoryService.getFactory().openSession();
ss.selectOne("pororo.delete",num);
ss.commit();
ss.close();
}
}
C mapper 작업 / sql 툴에서 미리 테스트해보고 매퍼 작업을 함.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pororo">
<insert id="add" parameterType="vo.PororoVO">
INSERT INTO PORORO VALUES(PORORO_SEQ.NEXTVAL, #{imgname} ,#{comm}
,SYSDATE, #{reip},#{price},#{qty})
</insert>
<select id="list" resultType="vo.PororoVO">
SELECT NUM, IMGNAME, COMM, REIP, PRICE,QTY, PDATE FROM PORORO ORDER BY 1
DESC
</select>
<select id="detail" parameterType="int" resultType="vo.PororoVO">
SELECT NUM, IMGNAME,COMM,REIP,PRICE,QTY,PDATE FROM PORORO WHERE NUM=#{num}
</select>
<delete id="delete" parameterType="int">
DELETE FROM PORORO WHERE NUM = #{num}
</delete>
</mapper>
D delete.jsp 작성 / 테이블 기본키를 파라미터로 받아오고, dao싱글톤을 호출한 후, 그 싱글톤을 통해서
삭제 메소드 소환
<%@page import="dao.PororoDao"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
//delete
int num = Integer.parseInt(request.getParameter("num"));
PororoDao.getDao().deleteFBoard(num);
response.sendRedirect("gallery.jsp");
%>
비번확인, 경고창 없이 바로 삭제가 되니, 테스트할 때 주의 !
2. 수정처리 => 자꾸 오류나서 아직 하는중 ㅠㅠㅠ....
A modify.jsp 폼 (수정목록에서 이미지, 이미지이름 , 날짜 수정 제외 => readonly 처리함)
<%@page import="dao.PororoDao"%>
<%@page import="vo.PororoVO"%>
<%@page import="vo.FBoardVO"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
//modify.jsp
int num = Integer.parseInt(request.getParameter("num"));
System.out.println("detailnum=>" + num);
PororoVO vo = PororoDao.getDao().detailFBoard(num);
System.out.println("detailnum=222>" + num);
%>
<%@include file="../header2.jsp"%>
<div id="wrap" class="container mt-5">
<h2>게시글 수정폼</h2>
<form method="post" action="update.jsp">
<input type="hidden" name="num" value="<%=num%>"> <input
type="hidden" name="reip" value="<%=request.getRemoteAddr()%>">
<div class="row mb-3">
<label for="imgn" class="col-sm-2 col-form-label">이미지 이름/상품</label>
<div class="col-sm-10">
<input type="text" name="imgn" class="form-control" id="imgn" readonly="readonly"
value="<%=vo.getImgname()%>">
</div>
</div>
<div class="row mb-3">
<label for="price" class="col-sm-2 col-form-label">가격</label>
<div class="col-sm-10">
<input type="number" name="price" class="form-control" id="price"
value="<%=vo.getPrice()%>">
</div>
</div>
<div class="row mb-3">
<label for="qty" class="col-sm-2 col-form-label">수량</label>
<div class="col-sm-10">
<input type="number" name="qty" class="form-control" id="qty"
value="<%=vo.getQty()%>">
</div>
</div>
<div class="row">
<label for="comm" class="col-sm-2 col-form-label">내용</label>
<div class="col-sm-10">
<textarea name="comm" rows="10" cols="50" id="comm"><%=vo.getComm()%></textarea>
</div>
</div>
<div class="row mb-3">
<label for="pdate" class="col-sm-2 col-form-label">입고일</label>
<div class="col-sm-10">
<input type="text" name="pdate" class="form-control" id="pdate" readonly="readonly"
value="<%=vo.getPdate()%>">
</div>
</div>
<div class="container text-center" role="group">
<button class="btn btn-primary" type="submit">글수정</button>
<button class="btn btn-danger" type="button"
onclick="location='gallery.jsp'">리스트</button>
</div>
</form>
</div>
<%@include file="../footer2.jsp"%>
B mapper 작업
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pororo">
<insert id="add" parameterType="vo.PororoVO">
INSERT INTO PORORO VALUES(PORORO_SEQ.NEXTVAL, #{imgname} ,#{comm}
,SYSDATE, #{reip},#{price},#{qty})
</insert>
<select id="list" resultType="vo.PororoVO">
SELECT NUM, IMGNAME, COMM, REIP, PRICE,QTY, PDATE FROM PORORO ORDER BY 1
DESC
</select>
<select id="detail" parameterType="int" resultType="vo.PororoVO">
SELECT NUM, IMGNAME,COMM,REIP,PRICE,QTY,PDATE FROM PORORO WHERE NUM=#{num}
</select>
<delete id="delete" parameterType="int">
DELETE FROM PORORO WHERE NUM = #{num}
</delete>
<update id="update" parameterType="vo.PororoVO">
UPDATE PORORO SET COMM=#{comm}, REIP = #{reip}, PRICE = #{price}, QTY = #{qty} WHERE NUM =#{num}
</update>
</mapper>
오랫동안 update.jsp에서 오류나서 울뻔 ㅠㅠㅠ
Fboard 예제에서는 비번을 체크했었으니, 기본키 번호+비번 2개가 파라미터 값이라, 메소드의 인자를 ProroVO vo로
받았는데, 이번 예제에선 비번 자체가 없으니 기본키 int 하나면 될 줄 알고 매퍼랑 dao를 다 그렇게 만들었더니
자꾸 안됐.... 혹시나 해서 파라미터 타입을 바꾸니 되네 ㅠ ...
C dao 메소드 구현
package dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import factory.FactoryService;
import vo.FBoardVO;
import vo.PororoVO;
public class PororoDao {
private static PororoDao dao;
private PororoDao() { //단축키
}
//싱글톤
public synchronized static PororoDao getDao() {
if(dao == null) {
dao= new PororoDao();
}
return dao;
}
public void addFBoard(PororoVO vo) {
SqlSession ss = FactoryService.getFactory().openSession();
ss.insert("pororo.add",vo);
ss.commit();
ss.close();
}//addfbo
public List<PororoVO> listFBoard() {
SqlSession ss = FactoryService.getFactory().openSession();
List<PororoVO> volist =ss.selectList("pororo.list");
ss.commit();
ss.close();
return volist;
}//listbo
public PororoVO detailFBoard(int num) {
SqlSession ss = FactoryService.getFactory().openSession();
PororoVO vo= ss.selectOne("pororo.detail",num);
ss.commit();
ss.close();
return vo;
}
public void deleteFBoard(int num) {
SqlSession ss = FactoryService.getFactory().openSession();
ss.selectOne("pororo.delete",num);
ss.commit();
ss.close();
}
public void updateFBoard(PororoVO vo) {
SqlSession ss = FactoryService.getFactory().openSession();
ss.selectOne("pororo.update",vo);
ss.commit();
ss.close();
}
}
D update.jsp
<%@page import="dao.PororoDao"%>
<%@page import="vo.PororoVO"%>
<%@page import="vo.FBoardVO"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
request.setCharacterEncoding("euc-kr");
//1.수정폼에서의 파라미터를 변수에 저장
int num = Integer.parseInt(request.getParameter("num"));
String imgname = request.getParameter("imgname");
String comm= request.getParameter("comm");
String pdate= request.getParameter("pdate");
String reip= request.getParameter("reip");
int price = Integer.parseInt(request.getParameter("price"));
int qty = Integer.parseInt(request.getParameter("qty"));
PororoVO vo = new PororoVO();
vo.setNum(num);
vo.setReip(reip);
vo.setImgname(imgname);
vo.setComm(comm);
vo.setPdate(pdate);
vo.setPrice(price);
vo.setQty(qty);
PororoDao.getDao().updateFBoard(vo);
response.sendRedirect("detail.jsp?num="+num);
%>
수량, 가격, 내용 등을 수정 해본다.

이렇게 짠 수정이 된다.

끗..... ㅠ