9일 차 특이사항
1. 비가 억수같이 내리는 아침이다.
2. map으로 받아서 게시글 조회와 등록을 했었다. dto를 받아서 해보자.
dto를 받아서 게시글 조회 및 등록
1. @ModelAttribute BoardVo vo
- dto, vo는 데이터 전송 객체다.
@RequestMapping("insert")
public String insert(@RequestParam Map<String, Object> map, @ModelAttribute BoardVO vo) {
int insert = boardService.insert(map);
if(insert == 0) {
return "write";
}else {
return "redirect:list";
}
}
즉, 이 코드는 클라이언트가 "/board/register" 경로로 POST 요청을 보낼 때, 전달된 파라미터를 받아와서 데이터베이스에 새로운 게시물을 추가하고, 추가 결과에 따라 적절한 뷰를 반환하거나 페이지로 이동시키는 역할을 합니다.
@RequestMapping("/board/register"): 이 메서드는 "/board/register" URL 경로에 대한 요청을 처리하는 메서드임을 나타냅니다. 즉, 클라이언트가 해당 경로로 요청을 보낼 때 이 메서드가 실행됩니다.
public String insert(@RequestParam Map<String, Object> map, @ModelAttribute BoardDto Dto): 이 메서드는 두 개의 매개변수를 받습니다.
@RequestParam Map<String, Object> map: HTTP 요청에서 전달된 파라미터들을 맵 형태로 받습니다. 클라이언트가 전달한 모든 파라미터들이 이 맵에 담기게 됩니다.
@ModelAttribute BoardDto Dto: HTTP 요청에서 넘어온 데이터를 BoardDto 클래스의 객체로 바인딩합니다. 보통 폼 데이터를 객체로 변환하는 데 사용됩니다.
int insert = service.insert(map); - 받은 맵 데이터와 객체를 이용하여 비즈니스 로직을 실행합니다. 여기서는 service 객체의 insert 메서드를 호출하여 데이터베이스에 새로운 게시물을 추가하는 것으로 보입니다. 메서드 실행 결과로 데이터베이스에 레코드가 삽입되었는지를 나타내는 정수값이 반환됩니다.
상세보기 페이지 만들기
1. 글 제목을 클릭하면 글 제목과 내용이 보인다.
2. BoardController.java
@RequestMapping("/board/detail")
public String getdetail(Model model, int seq) throws Exception{
BoardDto data = service.detail(seq);
model.addAttribute("data", data);
return "detail";
}
data에 게시판 DB가 저장되어 있다.
3. detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상세보기</title>
</head>
<body>
<table border="1">
<tr>
<th class="BOARD_SUBJECT">제목</th>
<th class="BOARD_CONTENT">내용</th>
</tr>
<tr>
<td>
<c:out value="${data.subject}" />
</td>
<td>
<c:out value="${data.content}" />
</td>
</tr>
</table>
</body>
</html>
4. BoardList.jsp에
<td><a href="<c:url value='/board/detail'/>?seq=${b.seq}">${b.Subject}</a></td>
추가해 줌. 제목을 누르면 상세 보기 페이지로(detail.jsp) 이동한다.
5. BoardDto.java
public class BoardDto {
private int seq;
private String name;
private String id;
private String subject;
private String content;
private Date regDate;
private Date uptDate;
private int viewCnt;
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
public Date getUptDate() {
return uptDate;
}
public void setUptDate(Date uptDate) {
this.uptDate = uptDate;
}
public int getViewCnt() {
return viewCnt;
}
public void setViewCnt(int viewCnt) {
this.viewCnt = viewCnt;
}
@Override
public String toString() {
return "BoardDto [seq=" + seq + ", name=" + name + ", id=" + id + ", subject=" + subject + ", content="
+ content + ", regDate=" + regDate + ", uptDate=" + uptDate + ", viewCnt=" + viewCnt + "]";
}
}
6. BoardDao, BoardDaoImpl
public interface BoardDao {
List<Map<String, Object>> list(Map<String, Object> paramMap);
// int insert(Map<String, Object> map);
int insert(BoardDto dto);
BoardDto detail(int seq);
}
@Repository("dao")
public class BoardDaoImpl implements BoardDao {
@Inject
public SqlSessionTemplate sqlSession;
@Override
public List<Map<String, Object>> list(Map<String, Object> paramMap) {
// TODO Auto-generated method stub
return sqlSession.selectList("mapper.list");
}
@Override
public int insert(BoardDto dto) {
// TODO Auto-generated method stub
return sqlSession.insert("mapper.insert", dto);
}
@Override
public BoardDto detail(int seq) {
// TODO Auto-generated method stub
System.out.println("seq :" + seq);
System.out.println("selectOne : " + sqlSession.selectOne("mapper.detail", seq));
return sqlSession.selectOne("mapper.detail", seq);
}
}
7. BoardService, BoardServiceImpl
public interface BoardService {
List<Map<String, Object>> list(Map<String, Object> paramMap);
//int insert(Map<String, Object> map);
int insert(BoardDto dto); // dto 사용
BoardDto detail(int seq);
}
@Service("service")
public class BoardServiceImpl implements BoardService{
@Inject
public BoardDao dao;
@Override
public List<Map<String, Object>> list(Map<String, Object> paramMap) {
// TODO Auto-generated method stub
return dao.list(paramMap);
}
@Override
public int insert(BoardDto dto) {
// TODO Auto-generated method stub
return dao.insert(dto);
}
@Override
public BoardDto detail(int seq) {
// TODO Auto-generated method stub
System.out.println("service.seq" + seq);
return dao.detail(seq);
}
// @Override
// public int insert(Map<String, Object> map) {
// // TODO Auto-generated method stub
// return dao.insert(map);
// }
}
8. BoardMapper.xml
<?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="mapper">
<resultMap type="map" id="rsMap">
<result column="seq" property="seq"/>
<result column="mem_name" property="memName"/>
<result column="mem_id" property="memId"/>
<result column="board_subject" property="Subject"/>
<result column="board_content" property="Content"/>
<result column="reg_date" property="regDate"/>
<result column="upt_date" property="uptDate"/>
<result column="view_cnt" property="viewCnt"/>
</resultMap>
<!-- 게시글 조회 -->
<select id="list" resultMap="rsMap">
select
seq
, mem_name
, mem_id
, board_subject
, board_content
, reg_date
, upt_date
, view_cnt
, useyn
from board_study
order by REG_DATE DESC
</select>
<!-- 글쓰기 -->
<insert id = "insert" parameterType="map">
insert into board_study(
SEQ
,MEM_NAME
,MEM_ID
,BOARD_SUBJECT
,BOARD_CONTENT
,REG_DATE
,VIEW_CNT
,USEYN
)values(
(select nvl(max(seq), 0) + 1 from board_study)
,#{name}
,#{id}
,#{subject}
,#{content}
,sysdate
,0
,'Y'
)
</insert>
<!-- 상세 페이지 -->
<select id="detail" parameterType="int" resultType="com.earth.downtown.dto.BoardDto">
select
SEQ AS seq
,BOARD_SUBJECT AS subject
,BOARD_CONTENT AS content
from board_study
where SEQ = #{seq}
</select>
</mapper>
결과
배운 점, 느낀 점
1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- jsp파일에 위 코드를 넣어주지 않으면 c태그를 사용할 수 없다.
2. mapper에 쿼리문 작성시 dto 변수와 이름을 맞춰줘야 한다. 해주지 않으면 인식을 못함.
<select id="detail" parameterType="int" resultType="com.earth.downtown.dto.BoardDto">
select
SEQ AS seq
,BOARD_SUBJECT AS subject
,BOARD_CONTENT AS content
from board_study
where SEQ = #{seq}
</select>
3. 한주가 정말 빨리 지나갔다. 시간이 너무 빨리 간다.
'일경험' 카테고리의 다른 글
[국민취업지원제도 일경험프로그램 11일차] SQL문제, 게시판 상세조회 페이지 (0) | 2023.08.16 |
---|---|
[국민취업지원제도 일경험프로그램 10일차] 게시판 체크박스로 삭제하기 (0) | 2023.08.15 |
[국민취업지원제도 일경험프로그램 8일차] 게시판 글쓰기 기능 : jsp에서 db로 데이터 보내기 (0) | 2023.08.11 |
[국민취업지원제도 일경험프로그램 7일차] 게시판 만들기 (map사용) (1) | 2023.08.09 |
[국민취업지원제도 일경험프로그램 6일차] 게시판 만들기(CRUD, SpringMVC, mapper, mybatis) (0) | 2023.08.09 |