코딩하는 문과생
[Spring] 6. 스프링 기본(5) - 게시판 (CRUD) 본문
클래스 기반으로 @RequestMapping을 설정할 수 있다.
@Controller
@requestMapping("/board")
public class UserCtrl {
...
[전체를 가져오자: MyBatis연결하기 위한 Mapper설정 후, ctrl, service, dao 작성]
0. JSP 수정 & DB 생성
<li><a href="/listPage.do"><i class="fa fa-clipboard" aria-hidden="true"></i>게시판</a></li>
CREATE TABLE INTERN_BOARD_TBL (
SEQ NUMBER PRIMARY KEY,
TITLE VARCHAR2(50) NOT NULL,
CONTENT VARCHAR2(4000),
WRITER VARCHAR2(50) REFERENCES INTERN_USER_TBL(ID),
REGDATE DATE DEFAULT SYSDATE,
VIEWCNT NUMBER DEFAULT 0
);
CREATE SEQUENCE BOARD_SEQ ;
INSERT INTO INTERN_BOARD_TBL(SEQ, TITLE, CONTENT, WRITER)
VALUES (BOARD_SEQ.NEXTVAL, 'hihi', 'hello', 'sijune');
INSERT INTO INTERN_BOARD_TBL(SEQ, TITLE, CONTENT, WRITER)
VALUES (BOARD_SEQ.NEXTVAL, 'nice to meet you', 'Hi, My name is LSJ', 'park');
SELECT * FROM INTERN_BOARD_TBL;
1. Mapper 먼저 작성 및 수정(boardMapper)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 해당 객체의 set과 get을 이용해 접근한다. -->
<mapper namespace="com.sinc.intern.board">
<select id="list" resultType="board">
SELECT SEQ, TITLE, CONTENT, WRITER, REGDATE, VIEWCNT
FROM INTERN_BOARD_TBL
</select>
</mapper>
2. BoardVO 만들기 - 그릇 만들기
3. config에 alias 추가
<typeAlias type="com.sinc.intern.board.model.vo.BoardVO" alias="board" />
4. Ctrl, Service, Dao 수정(Dao, Service, Ctrl 순으로 작성한다.)
- BoardCtrl
package com.sinc.intern.board.ctrl;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sinc.intern.board.service.BoardService;
@Controller
public class BoardCtrl {
@Resource(name="boardS")
private BoardService service;
@RequestMapping("/listPage.do")
public String list(Model model) {
System.out.println("-- Board Ctrl --");
//모델에 데이터를 넣어서 보내기
model.addAttribute("list", service.list());
return "board/listPage";
}
}

[글쓰기: CREATE하고 전체 글로 Redirect]
0. 준비 - 수정
$("#newBtn").on("click", function() {
location.href="registerForm.do";
});
@RequestMapping("/registerForm.do")
public String register() {
return "board/register";
}
<form role="form" method="post" action="register.do">
<!-- 액션 수정 -->
...
<input type="text" name="writer" class="form-control" readonly value="${loginUser.id}">
<!-- 무결성 확보 -->
...
1. Mapper수정
//insert, update, delete는 일반적으로 resultType불가, 성공하면 1, 실패하면 0 반환
<!-- 반환형이 int. 성공하면 1, 실패하면 0 -->
<insert id="register" parameterType="board">
INSERT INTO INTERN_BOARD_TBL
VALUES( BOARD_SEQ.NEXTVAL,
#{title}, #{content}, #{writer}, DEFAULT, DEFAULT)
</insert>
2. BoardDaoImpl 추가
@Override
public int registerRow(Object obj) {
System.out.println("-- Register Dao --");
return session.insert(PREFIX+".register", obj);
}
3. BoardServiceImpl 추가
@Override
public int register(Object obj) {
System.out.println("-- Register Service --");
return dao.registerRow(obj);
}
4. BoardCtrl: Redirect로 다시 화면이 나오게 한다.
@RequestMapping("/register.do")
public String register_do(BoardVO vo) {
System.out.println("register vo : " + vo);
int flag = service.register(vo);
// if(result!=0) {
// model.addAttribute("list", service.list());
// }
// return "board/listPage";
System.out.println("flag : " + flag);
return "redirect:/listPage.do";
}

[해당 글 선택시 세부사항 불러오기]
<td><a href='readPage.do?seq=${boardVO.seq}'>${boardVO.title}</a></td>
0. 준비
readPage.jsp 수정 - 필요없는 태그 주석처리
1. Ctrl, Service, Dao, Mapper 작성
//Ctrl에서 Model에 담아 반환한다.
@RequestMapping(value="/readPage.do", method=RequestMethod.GET)
public String read(BoardVO vo, Model model) {
System.out.println("-- read --");
Object result = service.read(vo);
model.addAttribute("board", result);
return "board/readPage";
}
@Override
public Object read(Object obj) {
return dao.readRow(obj);
}
@Override
public Object readRow(Object obj) {
return session.selectOne(PREFIX+".read", obj);
}
<select id="read" parameterType="board" resultType="board">
SELECT SEQ, TITLE, CONTENT, WRITER, TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE, VIEWCNT
FROM INTERN_BOARD_TBL
WHERE SEQ = #{seq}
</select>'웹 프로그래밍 > Spring' 카테고리의 다른 글
| [Spring] 8. 스프링 기본(7) - Interceptor (0) | 2020.02.07 |
|---|---|
| [Spring] 7. 스프링 기본(6) - 게시판 (CRUD)2 (0) | 2020.02.07 |
| [Spring] 5. 스프링 기본(4) - DB에 컬럼추가하기 (0) | 2020.02.06 |
| [Spring] 4. 스프링 기본(3) - DAO에서 MyBatis를 이용해 DB접근 (0) | 2020.02.04 |
| [Spring] 3. 스프링 기본(2)-브라우저에서 DAO까지 (0) | 2020.02.04 |