본문 바로가기
카테고리 없음

스프링부트 게시판 조회하기

by 크리스턍 2022. 5. 24.

게시판리스트 화면 호출 후 ajax 로 데이터를 조회

 

작성할 소스 목록

 

/gradleProject/src/main/java/com/example/demo/board/vo/BoardVO.java

/gradleProject/src/main/resources/mybatis/board/BoardMapper.xml

/gradleProject/src/main/java/com/example/demo/board/mapper/BoardMapper.java

/gradleProject/src/main/java/com/example/demo/board/service/BoardService.java

/gradleProject/src/main/java/com/example/demo/board/controller/BoardController.java

 

/gradleProject/src/main/webapp/WEB-INF/views/board/boardList.jsp
/gradleProject/src/main/resources/static/js/board/boardList.js

 

 

 

1. BoardTable 생성

 - 아래 게시물에서 테이블 생성하는 쿼리를 따라서 테이블 생성

https://gamma86.tistory.com/12

 

Mysql 게시판 테이블 생성, 조회, 등록, 수정, 삭제

-- 테이블 생성 CREATE TABLE `board` ( `BOARD_NO` int NOT NULL AUTO_INCREMENT, `BOARD_TYPE` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `TITLE` varchar(100) DEFAULT NULL, `CO..

gamma86.tistory.com

 

2. 데이터 조회를 위한 서비스단 코드 작성

 1) /gradleProject/src/main/java/com/example/demo/board/vo/BoardVO.java

    게시판 테이블의 데이터를 조회 후 값을 담을 오브젝트

package com.example.demo.board.vo;

import lombok.Data;

@Data
public class BoardVO {

    private String boardNo;
    private String boardType;
    private String title;
    private String contents;
    private String userId;
    private String createdTime;
    private String updatedTime;
    private String likes;
    private String counts;
    
}

  - lombok(@Data) 를 사용하여 getter, setter 를 생략한다.

 

 2) /gradleProject/src/main/resources/mybatis/board/BoardMapper.xml

    mybatis 로 데이터를 조회해 올 쿼리를 작성할 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.example.demo.board.mapper.BoardMapper">
    <select id="selectBoardList" resultType="com.example.demo.board.vo.BoardVO">
        SELECT BOARD_NO
             , BOARD_TYPE
             , TITLE
             , CONTENTS
             , USER_ID
             , CREATED_TIME
             , UPDATED_TIME
             , LIKES
             , COUNTS
        FROM BOARD
    </select>
</mapper>

  - namespace : 쿼리문을 호출할 interface 를 설정한다.

  - resultType : 조회한 데이터를 담은 오브젝트를 설정한다.

 

 3) /gradleProject/src/main/java/com/example/demo/board/mapper/BoardMapper.java

package com.example.demo.board.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.example.demo.board.vo.BoardVO;

@Mapper
public interface BoardMapper {
	List<BoardVO> selectBoardList(BoardVO paramVO);
}

 

  - @Mapper: 해당 인터페이스를 매퍼로 등록

  - 위 인터페이스에 등록된 메소드 명을 sql 아이디로 사용하여 Mapper.xml 의 sql 을 호출해 준다.

 

 4) /gradleProject/src/main/java/com/example/demo/board/service/BoardService.java

 

package com.example.demo.board.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.board.mapper.BoardMapper;
import com.example.demo.board.vo.BoardVO;

@Service
public class BoardService {
	
	@Autowired
	private BoardMapper boardMapper;
	
    public Map<String, Object> selectBoardList(BoardVO paramVO) {
        List<BoardVO> boardList = boardMapper.selectBoardList(paramVO);
        Map<String, Object> boardMap = new HashMap<>();
        boardMap.put("boardList", boardList);
        return boardMap;
    }
}

 

 5) /gradleProject/src/main/java/com/example/demo/board/controller/BoardController.java

package com.example.demo.board.controller;

import java.util.HashMap;
import java.util.Map;

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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.example.demo.board.service.BoardService;
import com.example.demo.board.vo.BoardVO;

@Controller
public class BoardController {
	
	@Autowired
	private BoardService boardService;
	
	
	// 게시판리스트 페이지
	@RequestMapping(value = "/board/boardList", method = {RequestMethod.GET, RequestMethod.POST})
	public ModelAndView boardList() {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("board/boardList");
		return mv;
	}
	
	// 게시판 목록 조회
	@RequestMapping(value = "/board/selectBoardList", method = {RequestMethod.GET, RequestMethod.POST})
	@ResponseBody
	public ModelAndView selectBoardList(BoardVO paramVO) {
		ModelAndView mv = new ModelAndView();
		Map<String, Object> boardMap = new HashMap<String, Object>();
		boardMap = boardService.selectBoardList(paramVO);
		mv.addObject("boardMap", boardMap);
		mv.setViewName("jsonView");
		return mv;
	}
}

 

  - boardList 메소드 : 게시판 페이지를 호출한다.

  - selectBoardList : 게시판 데이터를 조회해 준다.

 

 6) /gradleProject/src/main/webapp/WEB-INF/views/board/boardList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<div class="col-sm-offset-3 col-sm-9 col-md-10 col-md-offset-2 main">
    <h1 class="page-header">게시판</h1>
    <div class="table-responsive">
        <table class="table table-bordered dataTable">
            <thead>
            <tr>
                <th>No</th>
                <th>타입</th>
                <th>제목</th>
                <th>내용</th>
                <th>작성자</th>
            </tr>
            </thead>
            <tbody id="tbody_boardList">
            </tbody>
        </table>
    </div>
</div>

 7) /gradleProject/src/main/resources/static/js/board/boardList.js

 var boardList = {
 	// 최초 실행
	init: function(){
		boardList.selectBoardList();	// 게시판 조회
	},
    // 이벤트 바인딩
	bind: function(){
		
	},
    // 게시판 조회 ajax 호출
	selectBoardList: function(){
		$.ajax({
			url: '/board/selectBoardList',
			type: 'post',
			dataType: 'json',
			data: {},
			success: function(res) {
				boardList.drawBoardList(res.boardMap);
			}
		});
	},
    // 게시판 조회 데이터 html 로 화면에 그려주기
	drawBoardList: function(data){
		var html = '';
		$.each(data.boardList, function(i, v){
            html += '<tr>';
            html += '	<td>'+v.boardNo+'</td>';
            html += '   <td>'+v.boardType+'</td>';
            html += '   <td>'+v.title+'</td>';
            html += '   <td>'+v.contents+'</td>';
            html += '   <td>'+v.userId+'</td>';
            html += '</tr>';
		});
		$("#tbody_boardList").html(html);
	}
}

$(function(){
	boardList.init();
});

 - 함수를 화면명과 동일한 이름의 변수에 담아서 관리한다.

 

3. 테스트

 - http://localhost:8080/board/boardList

 

댓글