회원과 게시판 — 실습
글 쓰기와 목록 보기까지만. 의도적으로 인가 없음 — 다음 차시의 동기.
-- MySQL Workbench 에서
CREATE TABLE myboard (
num INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
writer VARCHAR(50) NOT NULL,
content TEXT NOT NULL
);
// com/smhrd/domain/Board.java
@Data @AllArgsConstructor @NoArgsConstructor
public class Board {
private int num;
private String title;
private String writer;
private String content;
}
SHOW COLUMNS FROM myboard; 로 4 컬럼 확인 — created_at, view_count 같은 컬럼이 없는지 다시 본다.// com/smhrd/mapper/BoardMapper.java
@Mapper
public interface BoardMapper {
List<Board> selectList();
Board selectOne(int num);
void insert(Board b);
}
<!-- BoardMapper.xml -->
<mapper namespace="com.smhrd.mapper.BoardMapper">
<select id="selectList" resultType="com.smhrd.domain.Board">
SELECT num, title, writer, content FROM myboard ORDER BY num DESC
</select>
<select id="selectOne" parameterType="int"
resultType="com.smhrd.domain.Board">
SELECT num, title, writer, content FROM myboard WHERE num = #{num}
</select>
<insert id="insert" parameterType="com.smhrd.domain.Board"
useGeneratedKeys="true" keyProperty="num">
INSERT INTO myboard(title, writer, content)
VALUES(#{title}, #{writer}, #{content})
</insert>
</mapper>
// BoardController
@Controller @RequestMapping("/board")
public class BoardController {
@Autowired BoardService service;
@GetMapping("/list")
public String list(Model model) {
model.addAttribute("boards", service.selectList());
return "board/list";
}
@GetMapping("/view")
public String view(@RequestParam int num, Model model) {
model.addAttribute("board", service.selectOne(num));
return "board/view";
}
@PostMapping("/write")
public String write(Board b, HttpSession session) {
Member u = (Member) session.getAttribute("loginUser");
b.setWriter(u.getId());
service.insert(b);
return "redirect:/board/list";
}
}
com.smhrd.mapper.BoardMapper) 과 일치하는가?num, title, writer, content 4 컬럼만 있는가?<!-- write.jsp -->
<form action="/board/write" method="post">
<input name="title" required />
<textarea name="content"></textarea>
<button>저장</button>
</form>
<!-- list.jsp -->
<c:forEach var="b" items="${boards}">
<tr>
<td>${b.num}</td>
<td><a href="/board/view?num=${b.num}">${b.title}</a></td>
<td>${b.writer}</td>
</tr>
</c:forEach>
Run on Server 로 실행하고 글 1 개를 작성한다.
INSERT INTO myboard(title, writer, content) 가 찍혔는가?SELECT * FROM myboard; 결과가 1 행 — 4 컬럼만 채워졌는가?