Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

soozya

[FRONT, BACK] 글 목록보기 (Spring MyBatis) 본문

👩🏻‍💻프로젝트/👩🏻개인프로젝트

[FRONT, BACK] 글 목록보기 (Spring MyBatis)

soozya 2023. 9. 19. 16:28

[👩🏻‍💻소스코드]

 

[FRONT]

더보기

(Community.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="java.util.Date, Board.*"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1">
<title>::함께 여행::</title>
 <link href="css/other.css" rel="stylesheet">
 <link href="css/bootstrap.min.css" rel="stylesheet">
 <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body> 
   <div class="left_title"><a href="main.jsp">함께 여행</a></div>
   <h2 class="com1 text-center"><a href="list.do"><b>커뮤니티</b></a></h2>
   <p> <hr>
 <div class="list">
   <div>
     <button class="btn btn-primary wr_bt" onclick="location.href='writeform.do'">글쓰기</button>
   </div>
   <p> <p>
	 <table class="table table-hover com_tb">
	    <thead>
	      <tr>
	    	<th class="text-center" width="15%">글 번호</th>
	        <th class="text-center" width="40%">글 제목</th>
	      	<th class="text-center" width="15%">작성자</th>
	      	<th class="text-center" width="20%">작성일</th>
	      	<th class="text-center" width="10%">조회수</th>
	      </tr>
	    </thead>
	    <tbody> 
		 <c:forEach var="list" items="${list}">
	      <tr>
	        <td class="text-center"> ${list.num}</td>
	        <td class="text-left"><a href="view.do?num=${list.num}">${list.title}</a></td>
	        <td class="text-center">닉네임</td>
	        <td class="text-center">
			   <fmt:formatDate value="${list.cdate}" timeStyle="medium" pattern="yyyy-MM-dd" />
			 </td>
	        <td class="text-center"> ${list.readc}</td>
	      </tr>	
	     </c:forEach>      
	    </tbody>
	 </table> 
 </div> <!-- class="main" -->
 <jsp:include page="footer.jsp" />
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

 

[BACK]

더보기

(tripboard.xml)

<!-- 1.글목록보기 -->
<select id="list" resultType="board">
 select * from tripboard order by num desc
</select>


(SqlMapBoardDAO.java)

public class SqlMapBoardDAO extends SqlSessionDaoSupport implements BoardDAO  {

	@Override
	public List list() throws DataAccessException{
		//selectList : 한개 이상을 호출하라 때
		return getSqlSession().selectList("list");
	}

 

(BoardDAO.java)

public interface BoardDAO {

//1.글 목록보기
	public List list() throws DataAccessException;

 

(ListAction.java)

package Board;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

//Controller인터페이스 : Request 처리+처리결과를 ModelAndView를 이용하여 view에 반환
public class ListAction implements Controller {

	BoardDAO dao;

	public void setDao(BoardDAO dao) { //setter메서드
	  this.dao = dao;
	  System.out.println("List의 setDao()호출: "+dao);
	}

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
									  HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("ListAction의 handleRequest() 호출됨!");
		List list=dao.list();

		//화면에 출력할 list.jsp에 전달할 페이지와 전달할 값 설정
		ModelAndView mav=new ModelAndView(); //이동할 페이지(공유)와 보내줄 데이터 담기
		mav.setViewName("community"); //이동할 페이지명
		mav.addObject("list",list); //키명, 저장값

		return mav; // =community.jsp
	}

}

 


[💬설명]

 

1️⃣ tripboard.xml : sql 구문에서 조회를 위한 select~로 시작하는 경우 태그 역시 select를 사용

   - resultType : sql구문에서 반환값이 있는 경우에 사용되며, 대부분 select 구문에서 쓰임

   - 여기에서 쓰이는 board는 SqlMapConfig.xml에서 설정했던 BoardCommand에 해당함    

 

2️⃣ SqlMapBoardDAO.java

  - 인터페이스(BoardDAO) 구현을 위해 implements 사용함

  - getSqlSession()을 이용하여 SqlSession 객체를 편히 얻어오기 위해 SqlSessionDaoSupport을 상속받음

    ➡ getSqlSession() = tripboard.xml의 sql 구문을 호출하는 것

  -  selectOne : 레코드 한 개만 가져올 때

     selectList : 레코드를 한 개 이상 가져올 때


3️⃣ BoardDAO.java

 - DataAccessException : spring전용 예외처리 클래스로, try ~ catch 생략 가능함

 

4️⃣ ListAction.java

  # 14~19) BoardDAO를 호출해서 받아옴

 

  # 29) 이동할 페이지, 화면 출력을 위한 객체(mav) 생성

    30) setViewName() : 이동할 페이지명

    31) addObject : 값 받아오기(키명, 저장값)

 


[❌ 발생한 에러]

 

- 에러 메시지

 Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for list

# MyBatis나 다른 SQL 매핑 프레임워크를 사용할 때 발생하는 일반적인 오류로, SQL 문장에 대한 매핑이나 설정이

   올바르게 이루어지지 않았을 때 발생한다고 함..!

# 저기보면 SqlMapBoardDAO.java:15라인에 문제가 있다고 뜨길래 가서 찾아보니 tripboard.xml의 id에 list가 아닌

   community라고 파일 이름을 써서 list로 고치고 다시 시도해서 해결함!

 


[💻결과]