Spring 20 Restful - 게시판(Restful, JSON, AJAX)[업데이트 중]

Kang.__.Mingu·2024년 9월 26일

Spring

목록 보기
19/21

SQL

create table rest_board(idx number primary key, writer varchar2(50)
, content varchar2(100), regdate date);

create sequence rest_board_seq;

RestBoard.java

@Data
public class RestBoard {
    private int idx;
    private String writer;
    private String content;
    private String regdate;
}

RestMapper.xml

<mapper namespace="xyz.itwill09.mapper.RestBoardMapper">
    <!-- 새 게시글을 삽입하는 쿼리 -->
    <insert id="insertRestBoard">
        <!-- 
            게시글을 삽입하기 전에 기본 키 값을 미리 생성.
            rest_board_seq 시퀀스에서 다음 값을 가져와 idx 필드에 저장.
            BEFORE 옵션을 사용해 쿼리 실행 전에 키 값을 설정.
        -->
        <selectKey resultType="int" keyProperty="idx" order="BEFORE">
            select rest_board_seq.nextval from dual
        </selectKey>
        <!-- 새 게시글을 삽입하는 쿼리 -->
        insert into rest_board values(#{idx}, #{writer}, #{content}, sysdate)
    </insert>
    
    <!-- 게시글을 업데이트하는 쿼리 -->
    <update id="updateRestBoard">
        <!-- idx로 게시글을 찾아서 writer와 content를 업데이트 -->
        update rest_board set writer=#{writer}, content=#{content} where idx=#{idx}
    </update>
    
    <!-- 게시글을 삭제하는 쿼리 -->
    <delete id="deleteRestBoard">
        <!-- idx로 특정 게시글을 찾아서 삭제 -->
        delete from rest_board where idx=#{idx}
    </delete>
    
    <!-- 특정 게시글을 조회하는 쿼리 -->
    <select id="selectRestBoard" resultType="RestBoard">
        <!-- idx로 특정 게시글을 조회, 게시글의 idx, writer, content, regdate 반환 -->
        select idx, writer, content, regdate from rest_board where idx=#{idx}
    </select>
    
    <!-- 게시글 총 개수를 조회하는 쿼리 -->
    <select id="selectRestBoardCount" resultType="int">
        <!-- 게시글의 총 개수를 반환 -->
        select count(*) from rest_board
    </select>
    
    <!-- 페이징을 적용한 게시글 목록을 조회하는 쿼리 -->
    <select id="selectRestBoardList" resultType="RestBoard">
        <!-- 
            게시글 목록을 rownum을 사용해 페이징 처리.
            가장 최근의 게시글부터 역순으로 정렬하여 startRow와 endRow 사이의 게시글을 반환.
        -->
        select * from (
            select rownum rn, board.* from (
                select idx, writer, content, regdate from rest_board order by idx desc
            ) board
        ) where rn between #{startRow} and #{endRow}
    </select>
</mapper>

RestMapper.java

public interface RestBoardMapper {
    int insertRestBoard(RestBoard restBoard);
    int updateRestBoard(RestBoard restBoard);
    int deleteRestBoard(int idx);
    RestBoard selectRestBoard(int idx);
    int selectRestBoardCount();
    List<RestBoard> selectRestBoardList(Map<String, Object> map);
}

RestBoardDAO.java

public interface RestBoardDAO {
    int insertRestBoard(RestBoard restBoard);
    int updateRestBoard(RestBoard restBoard);
    int deleteRestBoard(int idx);
    RestBoard selectRestBoard(int idx);
    int selectRestBoardCount();
    List<RestBoard> selectRestBoardList(Map<String, Object> map);
}

RestBoardDAOImpl.java

@Repository
@RequiredArgsConstructor
public class RestBoardDAOImpl implements RestBoardDAO {
    private final SqlSession sqlSession;

    public int insertRestBoard(RestBoard restBoard) {
        return sqlSession.getMapper(RestBoardMapper.class).insertRestBoard(restBoard);
    }

    @Override
    public int updateRestBoard(RestBoard restBoard) {
        return sqlSession.getMapper(RestBoardMapper.class).updateRestBoard(restBoard);
    }

    @Override
    public int deleteRestBoard(int idx) {
        return sqlSession.getMapper(RestBoardMapper.class).deleteRestBoard(idx);
    }

    @Override
    public RestBoard selectRestBoard(int idx) {
        return sqlSession.getMapper(RestBoardMapper.class).selectRestBoard(idx);
    }

    @Override
    public int selectRestBoardCount() {
        return sqlSession.getMapper(RestBoardMapper.class).selectRestBoardCount();
    }

    @Override
    public List<RestBoard> selectRestBoardList(Map<String, Object> map) {
        return sqlSession.getMapper(RestBoardMapper.class).selectRestBoardList(map);
    }
}

RestBoardService.java

public interface RestBoardService {
    void addRestBoard(RestBoard restBoard);
    void modifyRestBoard(RestBoard restBoard);
    void removeRestBoard(int idx);
    RestBoard getRestBoard(int idx);
    Map<String, Object> getRestBoardList(int pageNum, int pageSize);
}

RestBoardServiceImpl.java

@Service
@RequiredArgsConstructor
public class RestBoardServiceImpl implements RestBoardService {
    private final RestBoardDAO restBoardDAO;

    public void addRestBoard(RestBoard restBoard) {
        restBoardDAO.insertRestBoard(restBoard);
    }

    @Override
    public void modifyRestBoard(RestBoard restBoard) {
        restBoardDAO.updateRestBoard(restBoard);
    }

    @Override
    public void removeRestBoard(int idx) {
        restBoardDAO.deleteRestBoard(idx);
    }

    @Override
    public RestBoard getRestBoard(int idx) {
        return restBoardDAO.selectRestBoard(idx);
    }

    @Override
    public Map<String, Object> getRestBoardList(int pageNum, int pageSize) {
        int totalSize=restBoardDAO.selectRestBoardCount();
        int blockSize=5;
        Pager pager=new Pager(pageNum, pageSize, totalSize, blockSize);

        Map<String, Object> pageMap=new HashMap<String, Object>();
        pageMap.put("startRow", pager.getStartRow());
        pageMap.put("endRow", pager.getEndRow());
        List<RestBoard> restBoardList=restBoardDAO.selectRestBoardList(pageMap);

        Map<String, Object> resultMap=new HashMap<String, Object>();
        resultMap.put("pager", pager);
        resultMap.put("restBoardList", restBoardList);

        return resultMap;
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글