일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- progressive web app
- maven
- tdd
- 생활코딩
- HTML
- 서브쿼리
- SpringMVC
- sqldeveloper
- 프레임워크
- 자바프로그래밍
- javaprogramming
- TodayILearned
- springaop
- PWA
- CSS
- TIL
- Oracle
- javascript
- JavaScript 내장객체
- 프로그레시브웹앱
- 국비지원
- framework
- 메이븐
- 오라클
- js
- 자바스크립트
- sql
- mybatis
- web
- 스프링
- Today
- Total
1cm
자바 프로그래밍_Day_111_게시글 목록 조회 본문
2022. 01. 21
- 게시글 목록 조회
mybatis에서 작업했던 board.model.vo, board-mapper.xml 복붙해주기
list.jsp 파일 생성 후 내용은 이전에 mvc에서 사용했던 것 복붙
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:set var="path" value="${ pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>게시판 </h2>
<div id="board-list-container">
<c:if test="${ !empty loginMember }">
<button type="button" id="btn-add"
onclick="location.href='${ path }/board/write'">글쓰기</button>
</c:if>
<table id="tbl-board">
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>첨부파일</th>
<th>조회수</th>
</tr>
<c:if test="${ empty list }">
<tr>
<td colspan="6">
조회된 게시글이 없습니다.
</td>
</tr>
</c:if>
<c:if test="${ !empty list }">
<c:forEach var="board" items="${ list }">
<tr>
<td>${ board.rowNum }</td>
<td>
<a href="${ path }/board/view?no=${ board.no }">
${ board.title }
</a>
</td>
<td>${ board.writerId }</td>
<td>${ board.createDate }</td>
<td>
<c:if test="${ empty board.originalFileName }">
<span> - </span>
</c:if>
<c:if test="${ !empty board.originalFileName }">
<img src="${ path }/resources/images/file.png" width="20" height="20"/>
</c:if>
</td>
<td>${ board.readCount }</td>
</tr>
</c:forEach>
</c:if>
</table>
<div id="pageBar">
<!-- 맨 처음으로 -->
<button onclick="location.href='${ path }/board/list?page=1'"><<</button>
<!-- 이전 페이지로 -->
<button onclick="location.href='${ path }/board/list?page=${ pageInfo.prevPage }'"><</button>
<!-- 10개 페이지 목록 -->
<c:forEach begin="${ pageInfo.startPage }" end="${ pageInfo.endPage }" varStatus="status">
<c:if test="${ status.current == pageInfo.currentPage }">
<button disabled>${ status.current }</button>
</c:if>
<c:if test="${ status.current != pageInfo.currentPage }">
<button onclick="location.href='${ path }/board/list?page=${ status.current }'">${ status.current }</button>
</c:if>
</c:forEach>
<!-- 다음 페이지로 -->
<button onclick="location.href='${ path }/board/list?page=${ pageInfo.nextPage }'">></button>
<!-- 맨 끝으로 -->
<button onclick="location.href='${ path }/board/list?page=${ pageInfo.maxPage }'">>></button>
</div>
</div>
</body>
</html>
path로 이름 변경해주기
- list를 읽어올 수 있는 서블릿 만들기(컨트롤러)
> BoardController.java
package com.kh.mvc.board.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class BoardController {
// @GetMapping("/board/list")
// public void list() {
// }
@GetMapping("/board/list")
public String list() {
return "board/list";
}
}
-> 해당 클래스 파일 빈으로 등록하기(@Controller)
-> Get요청을 받을 수 있는 메소드 등록(@GetMapping)
-> 컨트롤러가 return하는 것 => view이름 (view resolver를 통해 가져옴)
페이지 info -> mybatis에서 썼던 파일 복붙
> util/PageInfo.java
package com.kh.mvc.common.util;
import lombok.Getter;
@Getter
public class PageInfo {
private int currentPage;
private int pageLimit;
private int listCount;
private int listLimit;
/**
* @param currentPage 현재 페이지
* @param pageLimit 한 페이지에 보이는 페이지의 수
* @param listCount 전체 리스트의 수
* @param listLimit 한 페이지에 표시될 리스트의 수
*/
public PageInfo(int currentPage, int pageLimit, int listCount, int listLimit) {
this.currentPage = currentPage;
this.pageLimit = pageLimit;
this.listCount = listCount;
this.listLimit = listLimit;
}
/**
* @return 전체 페이지 중 가장 마지막 페이지
*/
public int getMaxPage() {
/*
listCount = 100, listLimit = 10
100 / 10 = 10.0 => 10페이지
101 / 10 = 10.1 => 11페이지
103 / 10 = 10.3 => 11페이지
109 / 10 = 10.9 => 11페이지
110 / 10 = 11.0 => 11페이지
111 / 10 = 11.1 => 12페이지
*/
return (int) Math.ceil((double) this.listCount / this.listLimit);
}
/**
*
* @return 페이징 된 페이지 중 시작 페이지
*/
public int getStartPage() {
/*
< 1 2 3 4 5 6 7 8 9 10 >
< 11 12 13 14 15 16 17 18 19 20 >
< 21 22 23 24 25 26 27 28 29 30 >
1, 11, 21, 31, .... => (10 * n) + 1 (n >= 0)
1 ~ 10 : n = 0
11 ~ 20 : n = 1
21 ~ 30 : n = 2
31 ~ 40 : n = 3
....
n = (currentPage - 1) / pageLimit
(10 * ((currentPage - 1) / pageLimit)) + 1 (n >= 0)
*/
return (this.pageLimit * ((this.currentPage - 1) / this.pageLimit)) + 1;
}
/**
*
* @return 페이징 된 페이지 중 마지막 페이지
*/
public int getEndPage() {
// 10, 20, 30, 40, ....
int endPage = this.getStartPage() + this.pageLimit - 1;
return endPage > this.getMaxPage() ? this.getMaxPage() : endPage;
}
/**
*
* @return 현재 페이지
*/
public int getCurrentPage() {
return this.currentPage;
}
/**
*
* @return 이전 페이지
*/
public int getPrevPage() {
int prevPage = this.getCurrentPage() - 1;
return prevPage < 1 ? 1 : prevPage;
}
/**
*
* @return 다음 페이지
*/
public int getNextPage() {
int nextPage = this.getCurrentPage() + 1;
return nextPage > this.getMaxPage() ? this.getMaxPage() : nextPage;
}
/**
*
* @return 페이지의 시작 리스트
*/
public int getStartList() {
return (this.getCurrentPage() - 1) * this.listLimit + 1;
}
/**
*
* @return 페이지의 마지막 리스트
*/
public int getEndList() {
int endList = this.getStartList() + this.listLimit - 1;
return endList > this.listCount ? this.listCount : endList;
}
}
> BoardController.java
@GetMapping("/board/list")
public ModelAndView list(ModelAndView model,
@RequestParam(defaultValue = "1") int page) {
int listCount = 0;
PageInfo pageInfo = null;
List<Board> list = null;
log.info("page number : {}", page);
listCount = service.getBoardCount();
pageInfo = new PageInfo(page, 10, listCount, 10);
list = service.getBoardList(pageInfo);
model.addObject("pageInfo", pageInfo);
model.addObject("list", list);
model.setViewName("board/list");
return model;
}
-> BoardService 인터페이스 생성
> BoardController.java
package com.kh.mvc.board.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.kh.mvc.board.model.service.BoardService;
import com.kh.mvc.board.model.vo.Board;
import com.kh.mvc.common.util.PageInfo;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class BoardController {
@Autowired
private BoardService service;
// @GetMapping("/board/list")
// public void list() {
// }
@GetMapping("/board/list")
public ModelAndView list(ModelAndView model,
@RequestParam(defaultValue = "1") int page) {
int listCount = 0;
PageInfo pageInfo = null;
List<Board> list = null;
log.info("page number : {}", page);
listCount = service.getBoardCount();
pageInfo = new PageInfo(page, 10, listCount, 10);
list = service.getBoardList(pageInfo);
model.addObject("pageInfo", pageInfo);
model.addObject("list", list);
model.setViewName("board/list");
return model;
}
}
> BoardService.java
package com.kh.mvc.board.model.service;
import java.util.List;
import com.kh.mvc.board.model.vo.Board;
import com.kh.mvc.common.util.PageInfo;
public interface BoardService {
int getBoardCount();
List<Board> getBoardList(PageInfo pageInfo);
}
구현체 생성(BoardServiceImpl.java)
> BoardServiceImpl.java
package com.kh.mvc.board.model.service;
import java.util.List;
import com.kh.mvc.board.model.vo.Board;
import com.kh.mvc.common.util.PageInfo;
@Service
public class BoardServiceImpl implements BoardService {
@Override
public int getBoardCount() {
return 0;
}
@Override
public List<Board> getBoardList(PageInfo pageInfo) {
return null;
}
}
-> @Service 어노테이션을 붙여서 Bean으로 등록
쿼리를 수행할 수 있는 객체 (mapper 생성) 만들어주기
> board-mapper.xml
<select id="getBoardCountByFilters" parameterType="map" resultType="_int">
SELECT COUNT(*)
FROM BOARD
WHERE STATUS = 'Y'
<if test="list != null">
AND TYPE IN
<foreach collection="list" item="filter" open="(" separator="," close=")">
#{filter}
</foreach>
</if>
</select>
> BoardServiceImpl.java
package com.kh.mvc.board.model.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.kh.mvc.board.model.dao.BoardMapper;
import com.kh.mvc.board.model.vo.Board;
import com.kh.mvc.common.util.PageInfo;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper mapper;
// 게시글 갯수 읽어올 때 사용
@Override
public int getBoardCount() {
return mapper.getBoardCount();
}
@Override
public List<Board> getBoardList(PageInfo pageInfo) {
return null;
}
}
BoardMapper mapper;에 대한 에러 없애기 위한 인터페이스(dao) 생성
> BoardMapper.java
package com.kh.mvc.board.model.dao;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BoardMapper {
int getBoardCount();
}
인터페이스에 추상메소드 추가한 뒤 @Mapper 어노테이션으로 쿼리문을 불러들일 수 있게 해준다.
> board-mapper.xml
<mapper namespace="com.kh.mvc.board.model.dao.boardMapper">
풀 패키지명이 포함된 namespace작성,
xml에 mapper를 연결해준 뒤, 호출하고자 하는 쿼리문의 id와 호출하고자 하는 메소드의 이름을 동일하게 맞춰준다.
- Board 리스트 가져오기
> BoardServiceImpl.java
@Override
public List<Board> getBoardList(PageInfo pageInfo) {
int offset = (pageInfo.getCurrentPage() - 1) * pageInfo.getListLimit();
int limit = pageInfo.getListLimit();
RowBounds rowBounds = new RowBounds(offset, limit);
return mapper.findAll(rowBounds);
}
> board-mapper.xml
<select id="findAll" parameterType="map" resultMap="boardListResultMap">
<include refid="boardListSql"/>
<choose>
<when test="writer != null">
AND M.ID LIKE '%' || #{writer} || '%'
</when>
<when test="title != null">
AND B.TITLE LIKE '%' || #{title} || '%'
</when>
<when test="content != null">
AND B.CONTENT LIKE '%' || #{content} || '%'
</when>
</choose>
</select>
> BoardMapper.java
package com.kh.mvc.board.model.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.RowBounds;
import com.kh.mvc.board.model.vo.Board;
@Mapper
public interface BoardMapper {
int getBoardCount();
List<Board> findAll(RowBounds rowBounds);
}
- 게시글 사이즈 수정 (사용자가 선택해서 바꿀 수 있게끔)
> BoardController.java
@GetMapping("/board/list")
public ModelAndView list(ModelAndView model,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10")int count) {
PageInfo pageInfo = null;
List<Board> list = null;
log.info("page number : {}", page);
pageInfo = new PageInfo(page, 10, service.getBoardCount(), count);
list = service.getBoardList(pageInfo);
model.addObject("pageInfo", pageInfo);
model.addObject("list", list);
model.setViewName("board/list");
return model;
}
-> 주소창을 통해 page, count 수를 조절할 수 있음
> list.jsp
<button onclick="location.href='${ path }/board/list?page=${ status.current }&count=${ pageInfo.listLimit }'">${ status.current }</button>
-> 변경된 페이지 유지하고자 할 때(값이 변경된 상태) 페이지 정보와 카운트 정보를 같이 넘기면 된다.
-> ex. 10개씩보기, 20개씩보기 등 드롭박스 형식으로 응용가능
-> 검색기능 -> 검색결과 페이징 유지 (키워드, 작성자 등등)
-> 조건절에 대한 값이 null이 아닌 키워드나 등 원하는 조건을 만들어주면 된다.<when>
전체 실습 코드
> board-mapper.xml
<?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">
<mapper namespace="com.kh.mvc.board.model.dao.boardMapper">
<sql id="boardListSql">
SELECT B.NO,
B.TITLE,
M.ID,
B.READCOUNT,
B.ORIGINAL_FILENAME,
B.RENAMED_FILENAME,
B.CONTENT,
B.TYPE,
B.CREATE_DATE,
B.MODIFY_DATE
FROM BOARD B
JOIN MEMBER M ON(B.WRITER_NO = M.NO)
WHERE B.STATUS = 'Y'
</sql>
<resultMap type="Board" id="boardListResultMap">
<id property="no" column="NO"/>
<result property="title" column="TITLE"/>
<result property="writerId" column="ID"/>
<result property="readCount" column="READCOUNT"/>
<result property="originalFileName" column="ORIGINAL_FILENAME"/>
<result property="renamedFileName" column="RENAMED_FILENAME"/>
<result property="content" column="CONTENT"/>
<result property="type" column="TYPE"/>
<result property="createDate" column="CREATE_DATE"/>
<result property="modifyDate" column="MODIFY_DATE"/>
</resultMap>
<resultMap type="Reply" id="replyResultMap">
<id property="no" column="NO"/>
<result property="boardNo" column="BOARD_NO"/>
<result property="writerId" column="ID"/>
<result property="content" column="CONTENT"/>
<result property="createDate" column="CREATE_DATE"/>
<result property="modifyDate" column="MODIFY_DATE"/>
</resultMap>
<resultMap type="Board" extends="boardListResultMap" id="boardDetailResultMap">
<collection property="replies" javaType="arraylist" columnPrefix="R_" resultMap="replyResultMap"/>
</resultMap>
<select id="findAll" parameterType="map" resultMap="boardListResultMap">
<include refid="boardListSql"/>
<choose>
<when test="writer != null">
AND M.ID LIKE '%' || #{writer} || '%'
</when>
<when test="title != null">
AND B.TITLE LIKE '%' || #{title} || '%'
</when>
<when test="content != null">
AND B.CONTENT LIKE '%' || #{content} || '%'
</when>
</choose>
</select>
<select id="getBoardCount" parameterType="map" resultType="_int">
SELECT COUNT(*)
FROM BOARD
WHERE STATUS = 'Y'
<choose>
<when test="writer != null">
AND M.ID LIKE '%' || #{writer} || '%'
</when>
<when test="title != null">
AND B.TITLE LIKE '%' || #{title} || '%'
</when>
<when test="content != null">
AND B.CONTENT LIKE '%' || #{content} || '%'
</when>
</choose>
</select>
<select id="selectBoardListByFilters" parameterType="map" resultMap="boardListResultMap">
<include refid="boardListSql"/>
<if test="filters != null">
AND B.TYPE IN
<foreach collection="filters" item="filter" open="(" separator="," close=")">
#{filter}
</foreach>
</if>
</select>
<select id="getBoardCountByFilters" parameterType="map" resultType="_int">
SELECT COUNT(*)
FROM BOARD
WHERE STATUS = 'Y'
<if test="list != null">
AND TYPE IN
<foreach collection="list" item="filter" open="(" separator="," close=")">
#{filter}
</foreach>
</if>
</select>
<select id="selectBoardByNo" parameterType="_int" resultMap="boardDetailResultMap">
SELECT B.NO,
B.TITLE,
M.ID,
B.READCOUNT,
B.ORIGINAL_FILENAME,
B.RENAMED_FILENAME,
B.CONTENT,
B.TYPE,
B.CREATE_DATE,
B.MODIFY_DATE,
R.NO AS R_NO,
R.BOARD_NO AS R_BOARD_NO,
R.CONTENT AS R_CONTENT,
M2.ID AS R_ID,
R.CREATE_DATE AS R_CREATE_DATE,
R.MODIFY_DATE AS R_MODIFY_DATE
FROM BOARD B
JOIN MEMBER M ON(B.WRITER_NO = M.NO)
LEFT OUTER JOIN REPLY R ON(B.NO = R.BOARD_NO)
LEFT OUTER JOIN MEMBER M2 ON(R.WRITER_NO = M2.NO)
WHERE B.STATUS = 'Y' AND B.NO = #{no}
</select>
<insert id="insertBoard" parameterType="Board"
useGeneratedKeys="true" keyProperty="no" keyColumn="NO">
INSERT INTO BOARD (
NO,
WRITER_NO,
TITLE,
CONTENT,
ORIGINAL_FILENAME,
RENAMED_FILENAME,
READCOUNT,
STATUS,
TYPE,
CREATE_DATE,
MODIFY_DATE
) VALUES (
SEQ_BOARD_NO.NEXTVAL,
#{writerNo},
#{title},
#{content},
#{originalFileName},
#{renamedFileName},
DEFAULT,
DEFAULT,
DEFAULT,
DEFAULT,
DEFAULT
)
</insert>
<update id="updateBoard" parameterType="Board">
UPDATE BOARD
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">
TITLE = #{title},
</if>
<if test="content != null">
CONTENT = #{content},
</if>
<if test="originalFileName != null">
ORIGINAL_FILENAME = #{originalFileName},
</if>
<if test="renamedFileName != null">
RENAMED_FILENAME = #{renamedFileName},
</if>
MODIFY_DATE = SYSDATE
</trim>
WHERE
NO = #{no}
</update>
<update id="updateStatus" parameterType="map">
UPDATE BOARD SET STATUS = #{status} WHERE NO = #{no}
</update>
</mapper>
> list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:set var="path" value="${ pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>게시판 </h2>
<div id="board-list-container">
<c:if test="${ !empty loginMember }">
<button type="button" id="btn-add"
onclick="location.href='${ path }/board/write'">글쓰기</button>
</c:if>
<table id="tbl-board">
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>첨부파일</th>
<th>조회수</th>
</tr>
<c:if test="${ empty list }">
<tr>
<td colspan="6">
조회된 게시글이 없습니다.
</td>
</tr>
</c:if>
<c:if test="${ !empty list }">
<c:forEach var="board" items="${ list }">
<tr>
<td>${ board.rowNum }</td>
<td>
<a href="${ path }/board/view?no=${ board.no }">
${ board.title }
</a>
</td>
<td>${ board.writerId }</td>
<!-- <td><fmt:formatDate type="date" value="${ board.createDate }"/></td> -->
<td><fmt:formatDate pattern="yyyy-mm-dd" value="${ board.createDate }"/></td>
<td>
<c:if test="${ empty board.originalFileName }">
<span> - </span>
</c:if>
<c:if test="${ !empty board.originalFileName }">
<img src="${ path }/resources/images/file.png" width="20" height="20"/>
</c:if>
</td>
<td>${ board.readCount }</td>
</tr>
</c:forEach>
</c:if>
</table>
<div id="pageBar">
<!-- 맨 처음으로 -->
<button onclick="location.href='${ path }/board/list?page=1'"><<</button>
<!-- 이전 페이지로 -->
<button onclick="location.href='${ path }/board/list?page=${ pageInfo.prevPage }'"><</button>
<!-- 10개 페이지 목록 -->
<c:forEach begin="${ pageInfo.startPage }" end="${ pageInfo.endPage }" varStatus="status">
<c:if test="${ status.current == pageInfo.currentPage }">
<button disabled>${ status.current }</button>
</c:if>
<c:if test="${ status.current != pageInfo.currentPage }">
<button onclick="location.href='${ path }/board/list?page=${ status.current }&count=${ pageInfo.listLimit }'">${ status.current }</button>
</c:if>
</c:forEach>
<!-- 다음 페이지로 -->
<button onclick="location.href='${ path }/board/list?page=${ pageInfo.nextPage }'">></button>
<!-- 맨 끝으로 -->
<button onclick="location.href='${ path }/board/list?page=${ pageInfo.maxPage }'">>></button>
</div>
</div>
</body>
</html>
> BoardMapper.java
package com.kh.mvc.board.model.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.RowBounds;
import com.kh.mvc.board.model.vo.Board;
@Mapper
public interface BoardMapper {
int getBoardCount();
List<Board> findAll(RowBounds rowBounds);
}
> BoardServiceImpl.java
package com.kh.mvc.board.model.service;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.kh.mvc.board.model.dao.BoardMapper;
import com.kh.mvc.board.model.vo.Board;
import com.kh.mvc.common.util.PageInfo;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper mapper;
// 게시글 갯수 읽어올 때 사용
@Override
public int getBoardCount() {
return mapper.getBoardCount();
}
@Override
public List<Board> getBoardList(PageInfo pageInfo) {
int offset = (pageInfo.getCurrentPage() - 1) * pageInfo.getListLimit();
int limit = pageInfo.getListLimit();
RowBounds rowBounds = new RowBounds(offset, limit);
return mapper.findAll(rowBounds);
}
}
> BoardController.java
package com.kh.mvc.board.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.kh.mvc.board.model.service.BoardService;
import com.kh.mvc.board.model.vo.Board;
import com.kh.mvc.common.util.PageInfo;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
public class BoardController {
@Autowired
private BoardService service;
// @GetMapping("/board/list")
// public void list() {
// }
@GetMapping("/board/list")
public ModelAndView list(ModelAndView model,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10")int count) {
PageInfo pageInfo = null;
List<Board> list = null;
log.info("page number : {}", page);
pageInfo = new PageInfo(page, 10, service.getBoardCount(), count);
list = service.getBoardList(pageInfo);
model.addObject("pageInfo", pageInfo);
model.addObject("list", list);
model.setViewName("board/list");
return model;
}
}
> BoardMapper.java
package com.kh.mvc.board.model.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.RowBounds;
import com.kh.mvc.board.model.vo.Board;
@Mapper
public interface BoardMapper {
int getBoardCount();
List<Board> findAll(RowBounds rowBounds);
}
'국비지원_Java > Java Programming_2' 카테고리의 다른 글
자바 프로그래밍_Day_112_게시글 작성 (0) | 2022.03.02 |
---|---|
자바 프로그래밍_Day_110_회원 정보 수정, 회원 탈퇴 (0) | 2022.02.22 |
자바 프로그래밍_Day_109_회원정보 관련 (0) | 2022.02.18 |
자바 프로그래밍_Day_108_로그인, 로그아웃, 회원가입 구현 (0) | 2022.02.18 |
자바 프로그래밍_Day_107_Spring MVC, mybatis 연동 (0) | 2022.02.15 |