boardMapper.xml
<select id="getBoardName" parameterType="Integer" resultType="String">
SELECT board_name
FROM board_info
WHERE info_idx =#{info_idx}
</select>
글쓴이 이름은 없음 ,writer_idx는 있음
user테이블과 join이 필요함
user_idx와 writer_idx는 동일함
MySQL에서 테스트해보기
<select id="getBoardList" parameterType="Integer" resultType="com.demo.domain.ContentVO">
SELECT board_idx, title, u.name, regDate
FROM board b
JOIN user u
ON b.writer_idx = u.user_idx
WHERE info_idx = #{info_idx}
ORDER BY board_idx DESC ;
</select>
최신 글 순으로 조회, 게시판 번호(메뉴)로 검색
게시판 번호로 검색하니까 파라미터 타입은 정수
결과는 ContentVO로 가져옴
ContentVO생성 - 조인한 정보들을 담을 객체(게시판 목록을 담을 객체)
package com.demo.domain;
import java.util.Date;
public class ContentVO {
private int board_idx; //글번호
private String title; //제목
private String name; //작성자
private Date regDate; //작성날짜
//게터 세터 생성
public int getBoard_idx() {
return board_idx;
}
public void setBoard_idx(int board_idx) {
this.board_idx = board_idx;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
}
BoardDAO
//게시글 제목 출력
public String getBoardName(int info_idx) {
return sqlTemplate.selectOne("board.getBoardName", info_idx);
}
//게시글 목록 출력
public List<ContentVO> getContentList(int info_idx){
return sqlTemplate.selectList("board.getBoardList", info_idx);
}
BoardService
//게시판 제목 출력
public String getBoardName(int info_idx) {
return boardDAO.getBoardName(info_idx);
}
//게시글 목록 출력
public List<ContentVO> getContentList(int info_idx){
return boardDAO.getContentList(info_idx);
}
BoardController
@GetMapping("/main")
public String main(@RequestParam("info_idx") int info_idx,Model model) {
model.addAttribute("info_idx", info_idx);
model.addAttribute("boardName",boardService.getBoardName(info_idx));
model.addAttribute("list", boardService.getContentList(info_idx));
return "board/main";
}
main.jsp 수정
<!-- 게시글 리스트 -->
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<h4 class="card-title">${boardName}</h4>
<table class="table table-hover" id="board_list">
<thead>
<tr>
<th class="text-center d-none d-md-table-cell">글번호</th>
<th class="w-50">제목</th>
<th class="text-center d-none d-md-table-cell">작성자</th>
<th class="text-center d-none d-md-table-cell">작성날짜</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="obj">
<tr>
<td class="text-center d-none d-md-table-cell">${obj.board_idx}</td>
<td><a href="board_read.html">${obj.title}</a></td>
<td class="text-center d-none d-md-table-cell">${obj.name}</td>
<td class="text-center d-none d-md-table-cell">${obj.regDate}</td>
</tr>
</c:forEach>
</tbody>
</table>
글쓰기의 경우 사진 안넣으면 에러 발생함 ㅠ
content_file이 null값일 경우에 NULL이 되도록 Mapper과 DB설정 수정
<insert id="newBoard" parameterType="com.demo.domain.BoardVO">
INSERT INTO
board(title,content,content_file, writer_idx,info_idx)
VALUES( #{title},#{content},#{content_file,jdbcType=VARCHAR},#{writer_idx},#{info_idx}
)
</insert>
그리고 아까 처럼
하나밖에 없는 글인데 board_idx로 불러오니까 글 번호가 6번으로 표기됨
그래서 살짝 수정함
<%int i = 1; %>
<c:forEach items="${list}" var="obj">
<tr>
<td class="text-center d-none d-md-table-cell"> <%= i++ %></td><!--${obj.board_idx}이었다가 수정 -->
날짜 형식 수정함
main.jsp 라이브러리 추가
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%int i = 1; %>
<c:forEach items="${list}" var="obj">
<tr>
<td class="text-center d-none d-md-table-cell"> <%= i++ %></td><!--${obj.board_idx}이었다가 수정 -->
<td><a href="board_read.html">${obj.title}</a></td>
<td class="text-center d-none d-md-table-cell">${obj.name}</td>
<td class="text-center d-none d-md-table-cell">
<fmt:formatDate value="${obj.regDate}" pattern="yyyy-MM-dd"/>
</td>
</tr>
</c:forEach>
DB에 저장된 날짜와 다르게
반올림? 되게 출력이 돼서 db및 VO수정
BoardMapper.xml
<select id="getBoardList" parameterType="Integer" resultType="com.demo.domain.ContentVO">
SELECT board_idx, title, u.name, DATE_FORMAT(regDate,'%y-%m-%d') AS regDate
FROM board b
JOIN user u
ON b.writer_idx = u.user_idx
WHERE info_idx = #{info_idx}
ORDER BY board_idx DESC ;
</select>
ContentVO - regDate String으로 수정하고 게터 세터도 바꾼다
package com.demo.domain;
public class ContentVO {
private int board_idx; //글번호
private String title; //제목
private String name; //작성자
private String regDate; //작성날짜
//게터 세터 생성
public int getBoard_idx() {
return board_idx;
}
public void setBoard_idx(int board_idx) {
this.board_idx = board_idx;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRegDate() {
return regDate;
}
public void setRegDate(String regDate) {
this.regDate = regDate;
}
}
main.jsp
<!-- 게시글 리스트 -->
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<h4 class="card-title">${boardName}</h4>
<table class="table table-hover" id="board_list">
<thead>
<tr>
<th class="text-center d-none d-md-table-cell">글번호</th>
<th class="w-50">제목</th>
<th class="text-center d-none d-md-table-cell">작성자</th>
<th class="text-center d-none d-md-table-cell">작성날짜</th>
</tr>
</thead>
<tbody>
<%int i = 1; %>
<c:forEach items="${list}" var="obj">
<tr>
<td class="text-center d-none d-md-table-cell"> <%= i++ %></td><!--${obj.board_idx}이었다가 수정 -->
<td><a href="board_read.html">${obj.title}</a></td>
<td class="text-center d-none d-md-table-cell">${obj.name}</td>
<td class="text-center d-none d-md-table-cell">${obj.regDate}</td>
</tr>
</c:forEach>
</tbody>
</table>
'BACKEND > Spring' 카테고리의 다른 글
게시판 만들기 2 - 글 작성 후 작성했던 메뉴로 돌아가기 (0) | 2023.11.01 |
---|---|
게시판 만들기 2- 글 상세보기 페이지 (1) | 2023.11.01 |
게시판 만들기 2 - 이미지 업로드 설정 및 DB저장 (1) | 2023.10.31 |
게시판 만들기 2 - 글 작성하기(유효성검사) (0) | 2023.10.31 |
게시판 만들기 2 - 글 작성하기 (get) (0) | 2023.10.31 |