CRUD게시판 - 자유게시판
자유게시판 셋팅
table 생성하기
CREATE TABLE movie_board4(
no NUMBER,
name VARCHAR2(34) CONSTRAINT mb4_name_nn NOT NULL,
subject VARCHAR2(1000) CONSTRAINT mb4_subject_nn NOT NULL,
content CLOB CONSTRAINT mb4_content_nn NOT NULL,
pwd VARCHAR2(10) CONSTRAINT mb4_pwd_nn NOT NULL,
regdate DATE DEFAULT SYSDATE,
hit NUMBER DEFAULT 0,
CONSTRAINT mb4_no_pk PRIMARY KEY(no)
);
- 시퀀스 만들기
CREATE SEQUENCE mb4_no_seq START WITH 1 INCREMENT BY 1 NOCYCLE NOCACHE;
- 데이터값 집어넣기
INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); INSERT INTO movie_board4 VALUES ( mb4_no_seq.nextval, '홍길동','8장','8장','1234',SYSDATE,0 ); COMMIT;
BoardVO 제작
- 목적 : 필요한 데이터 여러개를 모아서 한 번에 브라우저로 보내기 위해 직접 제작한다.
- ~Bean , ~DTO, ~VO 라는 이름으로 쓰인다.
BoardDAO 제작
- date는 java.utill의 메서드임
- sql 컬럼명과 vo의 변수명이 불일치하면 마이바티스가 둘을 매칭하지 못해서 꼭 같게 설정해줘야함
mapper 제작하기
- 새로 생성한 mapper파일은 xml에 등록해둬야 마이바티스가 읽어갈 수 있다.
자유게시판 목록 출력하기
[freeboard]폴더에 list.jsp만들기
- 모양만 잡아둔다.
main.jsp , nav.jsp와 연결시키기
VO에 dbday 변수 추가하기
- 날짜를 simple-date 형식으로 변경해서 저장하기 위함임
board-mapper에 SQL문장 작성하기
- 다른 매퍼 파일의 id와 같은 것을 주는 경우에도 오류가 발생하므로,
ID명칭을 다르게 줘야 한다.- 앞에 테이블 명을 붙여주면 충돌없이 ID를 지을 수 있다.
- 마이바티스와 스프링은 먼저 XML을 다 읽기 때문에 XML이 틀릴 경우에는 구동이 안된다.
DAO 작성
[freeboard/list.jsp]
(1) Java
- 사용자가 요청(전송)한 데이터는 톰캠이 모든 데이터를 묶어서 request라는 객체에 첨부한다.
-
모든 데이터가 request를 통해서 들어오는데, 이때 이 값을 받는 메소드를
request.getParameter()
라고 한다. list.jsp?page=1
의 값을 받게 되면request.getParameter("page");
의 결과값이 1이다.list.jsp
의 값을 받게 되면request.getParameter("page");
의 결과값이 null이다.if(strPage==null)
list.jsp?page=
의 값을 받게 되면request.getParameter("page");
의 결과값이 ""(공백)이다.if(strPage.equals(""))
String strPage=request.getParameter("page");
if(strPage==null)
strPage="1";
- 현재 페이지 받기
int curpage=Integer.parseInt(strPage);
- 사용자가 요청한 페이지의 첫번째 데이터와 마지막 데이터의 번호를 map으로 받아서 리스트로 묶어두기
Map map = new HashMap(); int rowSize=10; int start=rowSize*(curpage-1)+1; // 오라클 int end=rowSize*curpage; map.put("start", start); map.put("end", end); List<BoardVO> list = BoardDAO.freeBoardListData(map);
cf. List
```
- ArrayList는 비동기화(섞여서 값을 가져오기 때문에 속도는 빠르지만 순서가 뒤섞여져서 값을 가져옴) 이미 저장되어 있는 데이터를 사용할때 주로 사용함(오라클)
- Vector : 동기화(다 읽어서 저장이 된 후에 값을 가져옴)방식임, 속도가 느림
- LinkedList() : C언어 호환할 때 사용함 ```
(2) HTML
자유게시판 새글 추가하기
list.jsp에서 새글 추가 버튼 만들기
- 클릭하면 mode 10번인 insert.jsp로 넘어가야 한다.
<a href="../main/main.jsp?mode=10" class="btn btn-sm btn-primary">새글</a>
main.jsp에 mode10번 include하기
<%
case 10:
jsp="../freeboard/insert.jsp";
break;
%>
freeboard/insert.jsp 만들기
- 기존 것 복붙하기
- 첨부파일 기능 삭제
freeboard/insert_ok.jsp 만들기
- 역할 : 사용자가 보내준 데이터를 받아서 DAO와 연결하고 list.jsp로 이동하기
- 사용자가 입력한 값 한글로 변환하기
<% request.setCharacterEncoding("utf-8"); %>
- 메모리 할당하기 ```JSP
- vo에 사용자가 보내준 값을 채우라고 명령 내리기
- useBean의 id와 setProperty의 name이 꼭 일치해야함
```jsp
<jsp:setProperty name="vo" property="*"/>
- 자바코드로 변환하면 아래와 같음
vo.setName(request.getParameter("name")); vo.setNo(request.getParameter("no")); // 이하 생략
- DAO에 값 넘겨주기
- DAO에서 freeboardInsert를 만들어 줘야함
<% BoardDAO.freeboardInsert(vo); %>
- DAO에서 freeboardInsert를 만들어 줘야함
board-mapper에 SQL 쿼리문장 작성하기
<insert id="freeBoardInsert" parameterType="com.sist.dao.BoardVO">
INSERT INTO movie_board4 VALUES(
mb_no_seq.nextval,
#{name},
#{subject},
#{content},
#{pwd},
SYSDATE,
0
)
</insert>
DAO에서 freeBoardInsert만들기
public static void freeBoardInsert(BoardVO vo)
{
SqlSession session=null;
try {
session=ssf.openSession(true);
session.insert("freeBoardInsert",vo);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(session!=null)
session.close();
}
}
freeboard/insert_ok.jsp에서 화면 이동시키기
<%
response.sendRedirect("../main/main.jsp?mode=9");
%>
자유게시판 글 상세보기
list.jsp 에서 제목 클릭하면 detail.jsp로 넘어가게 만들기
- 태그 사용하기
- mode11을 detail.jsp로 설정
- no값도 반드시 넘겨줘야함 : 사용자가 클릭한 게시글이 뭔지 no로 넘겨줘야 함 ```jsp
<td class="text-left" width=45%> <%=vo.getSubject() %> </td>
## main.jsp에서 detail.jsp include하기
```jsp
case 11:
jsp="../freeboard/detail.jsp";
break;
detail.jsp만들기
- board/detail.jsp와 동일하지만, 파일 첨부 기능만 지워주기
- 이 부분에 들어갈 내용은 board-mapper.xml에서 SQL문장을 작성해서 DAO에서 값을 가지고 와야 한다.
board-mapper.xml에서 쿼리문장 작성하기
(1) 조회수 증가시키기
- parameterType : 게시물의 번호를 대입해줄 것이므로 int라고 작성한다. ```xml
(2) 게시글 내용 데이터 읽기
```xml
<select id="freeBoardDetailData" resultType="com.sist.dao.BoardVO" parameterType="int">
SELECT no,name,subject,content,TO_CHAR(regdate,'YYYY-MM-DD') as dbday,hit
FROM movie_board4
WHERE no=#{no}
</select>
DAO작성하기
- 반환타입 작성하기
public static BoardVO freeBoardDetailData(int no) { BoardVO vo = new BoardVO(); return vo; }
- 조회수 증가시키기
session.update("freeBoardHitIncrement",no);
- 게시글 상세 데이터 받기
vo=session.selectOne("freeBoardDetailData",no);
detail.jsp에서 화면에 출력하기
(1) Java
- list.jsp → main.jsp를 통해 전송된 no값 받기
<% String no=request.getParameter("no"); %>
- no값에 해당하는 vo 데이터 받아오기
<% BoardVO vo=BoardDAO.freeBoardDetailData(Integer.parseInt(no)); %>
(2) HTML
- 첨부파일 내용 빼고 기존 detial.jsp와 동일
- 목록으로 돌아가기 버튼 만들기
<a href="../main/main.jsp?mode=9" class="btn btn-xs btn-danger">목록</a>
자유게시판 수정하기
- update.jsp : mode=12
detail.jsp에 수정 버튼 만들기
<a href="../main/main.jsp?mode=12&no=<%=vo.getNo() %>" class="btn btn-xs btn-primary">수정</a>
main.jsp에 update.jsp include하기
<%
switch(index)
{
case 12:
jsp="../freeboard/update.jsp";
break;
}
%>
board-mapper에서 쿼리문장 작성하기
- 수정할 게시글 내용 불러오는 쿼리문장은 필요 없음
- freeBoardDetailData와 동일하기 때문에 재사용이 가능하기 때문이다.
BoardDAO 작성하기
- board-mapper.xml에 이미 만들어진 SQL문장이 있는 경우 재사용이 가능하다.
- freeBoardUpdateData 만들기
//<select id="freeBoardDetailData" resultType="com.sist.dao.BoardVO" parameterType="int"> public static BoardVO freeBoardUpdateData(int no) { BoardVO vo = new BoardVO(); SqlSession session=null; return vo; }
- 쿼리문장 돌려서 나온 결과값 vo에 받기
try { session=ssf.openSession(true); vo= session.selectOne("freeBoardDetailData",no); } catch (Exception e) { e.printStackTrace(); } finally { if(session!=null) session.close(); }
update.jsp에서 결과값 받아서 화면에 출력하기
(1) Java
<% String no=request.getParameter("no"); BoardVO vo= BoardDAO.freeBoardDetailData(Integer.parseInt(no)); %>
(2) HTML
- 기존 update.jsp 파일 내용과 유사하기 때문에 거의 복붙!
- submit action 태그 경로 수정하기 ```jsp