-
게시판 목록 조회 기능(1)프로젝트 일지/Spring Boot & MyBatis - 게시판 2022. 8. 14. 20:11
- DB 테이블 설계 및 DTO 작성
1. 화면 설계서 참조하여 ERD 그려보기
2. ERD 기준으로 테이블 작성
- DDL문 작성/실행 하여 테이블 생성
3. 관련 테이블들에 대한 DTO 생성
- getter/setter 클래스 객체3. 관련 로직 개발
- 목록 조회에 해당 하는 프로세스 모두 작성
4. 로컬 서버 정상 실행 확인
- 마이바티스 연동/셋팅 및 기타 개발 오류에 의한 다양한 에러발생 예상
- 해당 에러에 대한 이슈들에 대한 원인 및 해결(개발자의 숙명. 실무에서 개발하는 시간보다 이슈해결이 더 오래걸리기도 하는듯)
5. 로컬 정상 실행까지 확인 후, 호출 결과 확인
- postman으로 조회기능에 대한 request uri 호출(json)하여 결과 확인
- 게시판 목록 조회 기능 개발
1. 마이바티스 연동
2. 게시판 목록 조회 쿼리 짜서, DBMS로 조회 결과 확인
- 테스트 데이터 insert 쿼리 DML문 작성하여 데이터 생성 후 목록 조회 쿼리 확인https://romanticdeveloper.tistory.com/38
<스프링 부트 Spring boot> 게시판 구현 - 글 목록 조회
- 게시판 글 목록 조회 기능 스프링보다 훨씬 간편하게 글 목록 조회 기능 구현이 가능하다. 순서는 다음과 같다. 1) Controller에 글 목록 조회 시 실행되는 메서드를 만든다. 매핑은 Get으로 한다. @G
romanticdeveloper.tistory.com
프로젝트 패키지의 구성은 다음과 같다
DB - Mapper - Service - Controller - Client(browser)
<BoardApplication.java>
package com.example.board; import javax.sql.DataSource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration; import org.springframework.context.annotation.Bean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; @SpringBootApplication @EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class}) //whitelabel 오류처리 public class BoardApplication { public static void main(String[] args) { SpringApplication.run(BoardApplication.class, args); } /* * SqlSessionFactory 설정 * Mybatis의 SqlSessionFactory 반환 * 스프링부트 실행 시 DataSource객체를 이 메서드 실행시 주입해서 결과를 만들고 그 결과를 스프링 내 빈으로 사용 */ @Bean // 스프링에 필요한 객체 생성 public SqlSessionFactory sqlessionFactory (DataSource datasource) throws Exception{ SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(datasource); return sessionFactory.getObject(); } }
<BoardDTO.java>
package com.example.board; public class BoardDTO { private String idx; private String title; private String content; private String writer; private String regdate; private String userId; private String userPw; private String userName; public String getidx() { return idx; } public void setidx(String idx) { this.idx = idx; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getWriter() { return writer; } public void setWriter(String writer) { this.writer = writer; } public String getRegdate() { return regdate; } public void setRegdate(String regdate) { this.regdate = regdate; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserPw() { return userPw; } public void setUserPw(String userPw) { this.userPw = userPw; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
<BoardMapper.java>
package com.example.board.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.example.board.BoardDTO; @Mapper // 데이터 접근 객체인 DAO와 같은 역할 // 마이바티스에서는 DAO보다 SqlSessionDaoSupport나 SqlSessionTemplate를 사용하기를 권장함. // 매퍼를 사용하면 일일이 DAO를 만들지 않고, 인터페이스만을 이용해 편하게 개발이 가능 public interface BoardMapper { // 게시글 개수 public int boardCount() throws Exception; // 게시글 목록 public List<BoardDTO> boardList() throws Exception; // 게시글 상세 public BoardDTO boardContent(int bno) throws Exception; // 게시글 수정 public void boardUpdate(BoardDTO board) throws Exception; }
<BoardMapper.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.board.mapper.BoardMapper"> <!-- xml파일을 사용할 mapper가 있는 경로 --> <!-- <select> 태그를 이용하여 select 쿼리임을 나타냄. --> <!-- 앞서 mapper에서 말했던 메소드의 이름은 select 쿼리의 id값과 같아야함. --> <select id="boardList" resultType="com.example.board.BoardDTO"> <![CDATA[ SELECT idx, title, writer, regdate FROM board_table ORDER BY idx DESC ]]> </select> </mapper>
<BoardService.java>
package com.example.board.service; import java.util.List; import com.example.board.BoardDTO; public interface BoardService { List<BoardDTO> boardList() throws Exception; }
<BoardServiceImpl.java>
package com.example.board.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.example.board.BoardDTO; import com.example.board.mapper.BoardMapper; @Service // 서비스임을 선언 public class BoardServiceImpl implements BoardService{ @Autowired // Mapper와 연결 private BoardMapper boardMapper; @Override public List<BoardDTO> boardList() throws Exception { return boardMapper.boardList(); } }
<BoardController.java>
package com.example.board.controller; import java.util.List; 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 org.springframework.web.servlet.ModelAndView; import com.example.board.service.BoardService; @Controller // 컨트롤러 선언 public class BoardController { @Autowired private BoardService boardService; //서비스와 연결 @RequestMapping("/openBoardList.do") //노테이션의 값으로 주소 지정 public String openBoardList() throws Exception{ System.out.println("BoardController 작동"); return "BoardList"; } }
<BoardList.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- forEach사용 --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>게시판</title> </head> <body> <form action=""> <!-- 검색기능. action 기능을 통해 넘어가게 --> <select name = "search" > <option value="제목" >제목</option> <option value="작성자" >작성자</option> </select> <input type="text" name="searchBox"> <input type="submit" value="검색"> </form> <div class="container"> <table class="table"> <colgroup> <col width="15%"/> <col width="*"/> <col width="15%"/> <col width="25%"/> </colgroup> <thead> <tr> <th scope="col">번호</th> <th scope="col">제목</th> <th scope="col">작성자</th> <th scope="col">등록일</th> </tr> </thead> <tbody> <c:forEach var="list" items="${list }"> <tr> <td ${list.idx}></td> <td ${list.title}></td> <td ${list.writer}></td> <td ${list.regdate}></td> </tr> </c:forEach> </tbody> </table> </div> </body> </html>
이렇게 만들어주면
이렇게 뜨는데
나는 분명 board_table 이라는 db테이블에 데이터를 하나 넣어줬는데 왜 뜨지 않는걸까...
아마 db연동이 제대로 되지 않은 것 같다 하하하
다음 게시물에서는 로그를 추가해서 오류가 어디서 일어났는지 찾아보고 수정하자
'프로젝트 일지 > Spring Boot & MyBatis - 게시판' 카테고리의 다른 글
게시판목록 검색기능 (0) 2022.08.17 게시판 목록 조회 기능(2) - 로그 설정, DB연결 오류 수정 (0) 2022.08.15 개발환경 세팅(4) - jsp와 톰캣 연동해서 hello 띄워보기 (0) 2022.08.07 개발환경 세팅(2) - MySQL과 DBeaver로 DB셋팅 (0) 2022.08.05 개발환경 세팅 (1) - STS, Mysql, Mybatis 다운로드 (0) 2022.08.05