-
[Spring] 게시판 만들기(14) - 게시글 조회(SELECT)Spring/4.3.x - 게시판 만들기 2018. 12. 17. 12:50반응형
모델2 방식에 MVC(Model, View, Controller) 패턴과 관련된 파일을 추가한 후 목록을 구현하는 작업을 진행하도록 하겠습니다.
Model 영역
애플리케이션에 비즈니스 로직과 사용되는 데이터를 다루는 영역입니다. 일반적으로 비즈니스 데이터는 DBMS에 의해 관리되고, 그 데이터를 다루는 연산은 SQL문을 통해 구현됩니다.
View 영역
최종 사용자에게 보여줄 프리젠테이션 로직을 담당하는 영역입니다. 일반적으로 자바 웹 애플리케이션에서는 JSP를 통해서 구현됩니다.
Controller 영역
컨트롤러는 흐름을 관리하는 역할을 하며, 모델과 뷰 영역간의 조정 역할을 합니다. 사용자의 요청을 받아 이를 수행하기 위한 비즈니스 로직을 선택하고 호출하며, 수행한 비즈니스 로직의 결과를 뷰를 통해 보여줍니다.
1. 모델2 방식 MVC 패턴 파일 추가
1_1. com.spring.board 패키지 밑에 controller, service, dao, dto, form 패키지를 생성한 후 java 파일을 추가하세요.
Controller 역할
- DispatcherServlet에 의해 호출되어 사용자의 Request를 전달받고, 해당 요청의 비즈니스 처리를 담당하는 서비스 객체를 Spring으로부터 주입(Dependency Injection)받아서, 그 서비스 객체에 처리를 위임하고, 처리 결과와 결과 화면에 대한 정보를 DispatcherServlet에게 반환합니다.
- Controller @Controller, @RequestMapping, @Autowired 서비스 처리 결과를 Model에 담으면, 컨트롤러 클래스의 RequestMapping값을 기준으로, DispatcherServlet이 ViewResolver를 통해 화면 URL 생성합니다.
Service 역할
- Controller에 의해 호출되어 실제 비즈니스 로직과 트랜잭션을 처리하고, DB CRUD(Persistence)를 담당하는 DAO 객체를 Spring 으로부터 주입 받아서, DAO에 DB CRUD 처리를 위임하고, 처리 결과를 Controller에게 반환합니다.
- Service @Service, @Transactional, @Autowired 비즈니스 로직과 트랜잭션 처리합니다.
DAO 역할
- Service에 의해 호출되어 쿼리를 담당하는 SqlMapClientTemplate 객체를 Spring으로부터 주입받아서, SqlMapClientTemplate 객체에 쿼리 수행을 위임하고, 처리 결과를 Service에게 반환합니다.
- DAO @Repository, @Autowired SqlMapClientTemplate을 통해 쿼리 수행 후 결과 반환합니다.
@Contoller
Presentation Layer에서 Contoller를 명시하기 위해서 사용됩니다.
@Service
Business(Service) Layer에서 Service를 명시하기 위해서 사용됩니다.
@Repository
Persistence Layer에서 DAO를 명시하기 위해서 사용됩니다.
BoardController.java
더보기1234567891011121314151617181920212223242526272829303132333435363738package com.spring.board.controller;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.spring.board.dto.BoardDto;import com.spring.board.form.BoardForm;import com.spring.board.service.BoardService;@Controller@RequestMapping(value = "/board")public class BoardController {@Autowiredprivate BoardService boardService;@RequestMapping( value = "/boardList")public String getBoardList(HttpServletRequest request, HttpServletResponse response) throws Exception{return "board/boardList";}@RequestMapping(value = "/getBoardList")@ResponseBodypublic List<BoardDto> getBoardList(HttpServletRequest request, HttpServletResponse response, BoardForm boardForm) throws Exception {List<BoardDto> boardList = boardService.getBoardList(boardForm);return boardList;}}cs BoardService.java
더보기12345678910111213141516171819202122package com.spring.board.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.spring.board.dao.BoardDao;import com.spring.board.dto.BoardDto;import com.spring.board.form.BoardForm;@Servicepublic class BoardService {@Autowiredprivate BoardDao boardDao;public List<BoardDto> getBoardList(BoardForm boardForm) throws Exception {return boardDao.getBoardList(boardForm);}}cs BoardDao.java
더보기12345678910111213141516171819202122232425package com.spring.board.dao;import java.util.List;import javax.annotation.Resource;import org.apache.ibatis.session.SqlSession;import org.springframework.stereotype.Repository;import com.spring.board.dto.BoardDto;import com.spring.board.form.BoardForm;@Repositorypublic class BoardDao {@Resource(name = "sqlSession")private SqlSession sqlSession;private static final String NAMESPACE = "com.spring.board.boardMapper";public List<BoardDto> getBoardList(BoardForm boardForm) throws Exception {return sqlSession.selectList(NAMESPACE + ".getBoardList");}}cs BoardDto.java
더보기123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124package com.spring.board.dto;import java.util.Date;public class BoardDto {int board_seq;int board_re_ref;int board_re_lev;int board_re_seq;String board_writer;String board_subject;String board_content;int board_hits;String del_yn;String ins_user_id;Date ins_date;String upd_user_id;Date upd_date;public int getBoard_seq() {return board_seq;}public void setBoard_seq(int board_seq) {this.board_seq = board_seq;}public int getBoard_re_ref() {return board_re_ref;}public void setBoard_re_ref(int board_re_ref) {this.board_re_ref = board_re_ref;}public int getBoard_re_lev() {return board_re_lev;}public void setBoard_re_lev(int board_re_lev) {this.board_re_lev = board_re_lev;}public int getBoard_re_seq() {return board_re_seq;}public void setBoard_re_seq(int board_re_seq) {this.board_re_seq = board_re_seq;}public String getBoard_writer() {return board_writer;}public void setBoard_writer(String board_writer) {this.board_writer = board_writer;}public String getBoard_subject() {return board_subject;}public void setBoard_subject(String board_subject) {this.board_subject = board_subject;}public String getBoard_content() {return board_content;}public void setBoard_content(String board_content) {this.board_content = board_content;}public int getBoard_hits() {return board_hits;}public void setBoard_hits(int board_hits) {this.board_hits = board_hits;}public String getDel_yn() {return del_yn;}public void setDel_yn(String del_yn) {this.del_yn = del_yn;}public String getIns_user_id() {return ins_user_id;}public void setIns_user_id(String ins_user_id) {this.ins_user_id = ins_user_id;}public Date getIns_date() {return ins_date;}public void setIns_date(Date ins_date) {this.ins_date = ins_date;}public String getUpd_user_id() {return upd_user_id;}public void setUpd_user_id(String upd_user_id) {this.upd_user_id = upd_user_id;}public Date getUpd_date() {return upd_date;}public void setUpd_date(Date upd_date) {this.upd_date = upd_date;}}cs BoardForm.java
더보기123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125package com.spring.board.form;import java.util.Date;public class BoardForm {int board_seq;int board_re_ref;int board_re_lev;int board_re_seq;String board_writer;String board_subject;String board_content;int board_hits;String del_yn;String ins_user_id;Date ins_date;String upd_user_id;Date upd_date;public int getBoard_seq() {return board_seq;}public void setBoard_seq(int board_seq) {this.board_seq = board_seq;}public int getBoard_re_ref() {return board_re_ref;}public void setBoard_re_ref(int board_re_ref) {this.board_re_ref = board_re_ref;}public int getBoard_re_lev() {return board_re_lev;}public void setBoard_re_lev(int board_re_lev) {this.board_re_lev = board_re_lev;}public int getBoard_re_seq() {return board_re_seq;}public void setBoard_re_seq(int board_re_seq) {this.board_re_seq = board_re_seq;}public String getBoard_writer() {return board_writer;}public void setBoard_writer(String board_writer) {this.board_writer = board_writer;}public String getBoard_subject() {return board_subject;}public void setBoard_subject(String board_subject) {this.board_subject = board_subject;}public String getBoard_content() {return board_content;}public void setBoard_content(String board_content) {this.board_content = board_content;}public int getBoard_hits() {return board_hits;}public void setBoard_hits(int board_hits) {this.board_hits = board_hits;}public String getDel_yn() {return del_yn;}public void setDel_yn(String del_yn) {this.del_yn = del_yn;}public String getIns_user_id() {return ins_user_id;}public void setIns_user_id(String ins_user_id) {this.ins_user_id = ins_user_id;}public Date getIns_date() {return ins_date;}public void setIns_date(Date ins_date) {this.ins_date = ins_date;}public String getUpd_user_id() {return upd_user_id;}public void setUpd_user_id(String upd_user_id) {this.upd_user_id = upd_user_id;}public Date getUpd_date() {return upd_date;}public void setUpd_date(Date upd_date) {this.upd_date = upd_date;}}cs 1_2. webapp/WEB-INF/views 위치에 board 폴더를 생성한 후 Jsp 파일을 추가하세요.
boardList.jsp
더보기12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>게시판 목록</title><script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script><script type="text/javascript">$(document).ready(function(){getBoardList();});function getBoardList(){$.ajax({type:"GET",url:"/board/getBoardList",dataType:"JSON",success : function(obj) {getBoardListCallback(obj);},error : function(xhr, status, error) {}});}function getBoardListCallback(obj){var list = obj;var listLen = obj.length;console.log(list);console.log(listLen);var str = "";if(listLen > 0){for(var a=0; a<listLen; a++){var boardSeq = list[a].board_seq;var boardReRef = list[a].board_re_ref;var boardReLev = list[a].board_re_lev;var boardReSeq = list[a].board_re_seq;var boardWriter = list[a].board_writer;var boardSubject = list[a].board_subject;var boardContent = list[a].board_content;var boardHits = list[a].board_hits;var delYn = list[a].del_yn;var insUserId = list[a].ins_user_id;var insDate = list[a].ins_date;var updUserId = list[a].upd_user_id;var updDate = list[a].upd_date;str += "<tr>";str += "<td>"+ boardSeq +"</td>";str += "<td>"+ boardSubject +"</td>";str += "<td>"+ boardHits +"</td>";str += "<td>"+ boardWriter +"</td>";str += "</tr>";}} else {str += "<tr colspan='4'>";str += "<td>등록된 글이 존재하지 않습니다.</td>";str += "<tr>";}$("#tbody").html(str);}</script></head><body><table border=1 width=350><thead><tr><td>글번호</td><td>제목</td><td>조회수</td><td>작성자</td></tr></thead><tbody id="tbody"></tbody></table></body></html>cs 2. MVC Controller (/board/boardList) 호출
2_1. path를 /board를 /로 변경하세요.
2_2. localhost:9090/board/boardList 로 호출 시에 DB가 조회되는지 확인하세요.
소스 코드는 Github Repository - https://github.com/tychejin1218/board_v1 (branch : section14) 를 참조하세요.
Github에서 프로젝트 가져오기 - https://tychejin.tistory.com/33반응형'Spring > 4.3.x - 게시판 만들기' 카테고리의 다른 글
[Spring] 게시판 만들기(16) - 트랜잭션(Transaction) 설정 (11) 2018.12.19 [Spring] 게시판 만들기(15) - 게시글 등록(INSERT), 수정(UPDATE), 삭제(DELETE), 상세 조회(SELECT) (28) 2018.12.17 [Spring] 게시판 만들기(13) - mapper 및 json 설정 (3) 2018.12.14 [Spring] 게시판 만들기(12) - Mybatis 연동 (9) 2018.12.14 [Spring] 게시판 만들기(11) - 인터셉터(Interceptor) 설정 (5) 2018.12.14