MyBatis

4. 게시판 목록 만들기와 페이징/TDD (2) - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 28. 13:05

1. BoardDaoImpl추가

  • BoardDaoImpl 클래스
@Repository
public class BoardDaoImpl implements BoardDao {

    @Autowired
    SqlSession session;
    // 마지막에 .붙여주기
    String namespace="com.fastcampus.ch4.dao.BoardMapper.";

    // select
    @Override
    public BoardDto select(int bno) throws Exception{
        return session.selectOne(namespace+"select", bno);
    }
    // insert
    @Override
    public int insert(BoardDto dto) throws Exception{
        return session.insert("insert", dto);
    }

    @Override
    public int delete(int bno, String writer) throws Exception{
        Map map = new HashMap();
        map.put("bno", bno);
        map.put("writer", writer);
        return session.delete(namespace+"delete", map);
    }
    @Override
    public int update(BoardDto dto) throws Exception{
        return session.update(namespace+"update", dto);
    }
    @Override
    public String now(){
        return session.selectOne(namespace+"now");
    }
    @Override
    public int count(){
        return session.selectOne(namespace+"count");
    }
    @Override
    public List<BoardDto> selectAll(){
        return session.selectOne(namespace+"selectAll");
    }
    @Override
    public int increaseViewCnt(int bno){
        return session.update(namespace+"increaseViewCnt", bno);
    }
    @Override
    public int deleteAll(){
        return session.delete(namespace+"deleteAll");
    }
    @Override
    public void deleteForAdmin(){
        session.delete(namespace+"deleteForAdmin");
    }

    @Override
    public List<BoardDto> selectPage(Map map) {
        return List.of();
    }

    @Override
    public int searchResultCnt(SearchCondition sc) {
        return 0;
    }

    @Override
    public List<BoardDto> searchSelectPage(SearchCondition sc) {
        return List.of();
    }
}
  • BoardDao 인터페이스
public interface BoardDao {
    // select
    BoardDto select(int bno) throws Exception;

    // insert
    int insert(BoardDto dto) throws Exception;

    int delete(int bno, String writer) throws Exception;

    int update(BoardDto dto) throws Exception;

    String now();

    int count();

    List<BoardDto> selectAll();

    int increaseViewCnt(int bno);

    int deleteAll();

    void deleteForAdmin();

    List<BoardDto> selectPage(Map map);

    int searchResultCnt(SearchCondition sc);

    List<BoardDto> searchSelectPage(SearchCondition sc);
}
  • boardMapper.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTO Mapper 3.0/EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.fastcampus.ch4.dao.BoardMapper">
    <select id="now" resultType="String">
        SELECT now()
    </select>
    <select id="count" resultType="int">
        SELECT count(*) FROM board
    </select>
    <select id="select" parameterType="int" resultType="BoardDto">
        SELECT bno, title, content, writer, view_cnt, comment_cnt, reg_date, up_date
        FROM board
        WHERE bno=#{bno}
    </select>
    <insert id="insert" parameterType="BoardDto" >
        INSERT INTO board
            (title, content, writer)
        VALUES
            (#{title}, #{content}, #{writer})
    </insert>
    <delete id="delete" parameterType="Map">
        DELETE FROM board WHERE bno=#{bno} and writer = #{writer}
    </delete>
    <update id="update" parameterType="BoardDto">
        UPDATE board
        SET title = #{title},content = #{content}
        WHERE bno=#{bno}
    </update>

    <select id="selectAll" resultType="BoardDto">
        SELECT bno, title, content, writer, view_cnt, comment_cnt, reg_date
        FROM board
        ORDER BY reg_date DESC, bno DESC
    </select>

    <update id="increaseViewCnt" parameterType="int">
        UPDATE board
        SET view_cnt = view_cnt + 1
        WHERE bno = #{bno}
    </update>

    <delete id="deleteAll">
        DELETE FROM board
    </delete>

    <delete id="deleteForAdmin">
        DELETE FROM board WHERE bno = #{bno}
    </delete>

    <select id="selectPage" parameterType="map" resultType="BoardDto">
        SELECT bno, title, content, writer, view_cnt, comment_cnt, reg_date
        FROM board
        ORDER BY reg_date desc, bno desc
        LIMIT #{offset}, #{pageSize}
    </select>

</mapper>
  • PageHandler 클래스
@ToString
@Getter
@Setter
public class PageHandler {
    private int totalCnt;   // 총 게시물 갯수
    private int pageSize;   // 한 페이지의 크기
    private int navSize = 10;    // 페이지 내비게이션의 크기
    private int totalPage;  // 전체 페이지의 갯수
    private int page;       // 현재 페이지
    private int beginPage;  // 내비게이션의 첫번째 페이지
    private int endPage;    // 내비게이션의 마지막 페이지
    private boolean showPrev;   // 이전 페이지로 이동하는 링크를 보여줄 것인지의 여부
    private boolean showNext;   // 다음 페이지로 이동하는 링크를 보여줄 것인지의 여부

    public PageHandler(int totalCnt, int page){
        this(totalCnt, page, 10);
    }

    public PageHandler(int totalCnt, int page, int pageSize){
        this.totalCnt = totalCnt;
        this.page = page;
        this.pageSize = pageSize;

        totalPage = (int)Math.ceil(totalCnt / (double)pageSize);
        beginPage = page > 10 ? (page-1)/navSize*navSize+1 : 1;
        endPage = Math.min(beginPage + navSize-1, totalPage);
        showPrev = beginPage != 1;
        showNext = endPage != totalPage;
    }

    void print(){
        System.out.print("page = ");
        System.out.print(showPrev ? "[PREV] " : "");
        for (int i = beginPage; i <= endPage; i++) {
            System.out.print(i+" ");
        }
        System.out.println(showNext ? "[NEXT]" : "");
    }
}
  • beginPage가 계속 오류라서 고쳐줬다 -> 10의 단위에서 다음 nav로 넘어가는 문제... 해결