Spring MVC 기초
controller는 게시판을 처리하는 컨트롤러이다. (현실세계로 치면 아르바이트생 정도)
Mapper는 데이터베이스를 연결하는 패키지이다.
Mapper에서는 메서드가 실행될 때 사용될 쿼리문을 작성한다.
그러기 위해서는 매핑을 잘 해줘야하는데 mapper의 namespace를 해당 패키지 명으로 지정해야한다.
<select id="getLists" resultType="kr.board.entity.Board">
select * from board order by idx desc
</select>
그리고 select id를 실행이 필요한 메서드 명과 연결을 해두고, 묶어주는 타입(resultType)을 설정해준다.
1. 동작순서
게시판 리스트를 보여주려면 어떤 순서로 진행이 될까?
클라이언트에서 게시판리스트를 보여달라는 요청(boardList.do)이 오면 controller에서 해당 요청을 찾는다.
그러면 controller에서는 @RequestMapping을 통해서 해당 요청을 찾는다.
이런 방식을 핸들러매핑이라고 한다.
// /boardList.do
@RequestMapping("/boardList.do")
public String boardList(Model model) {
Board vo = new Board();
vo.setIdx(1);
vo.setTitle("게시판실습");
vo.setContent("게시판 실습");
vo.setWriter("안신애");
vo.setIndate("2023-10-17");
vo.setCount(0);
List<Board> list = new ArrayList<Board>();
list.add(vo);
list.add(vo);
list.add(vo);
model.addAttribute("list", list);
return "boardList"; // /WEB-INF/views/boardList.jsp로 가라. -> forward
}
데이터베이스를 아직 만든게 없으니까 직접 입력을 해주고 생성해보자.
생성한 객체를 model.addAtrribute를 이용해서 객체바인딩을 한다.
그러면 forwarding될때 해당 데이터를 가지고 간다.
여기서 return "boardList"가 /WEB-INF/views/boardList.jsp로 이동해라 라고 요청하는 것이다.
그래서 해당 경로의 boardList.jsp파일을 열게된다.
boardList.jsp
<table class="table table-bordered table-hover">
<tr>
<td>번호</td>
<td>제목</td>
<td>작성자</td>
<td>작성일</td>
<td>조회수</td>
</tr>
<c:forEach var="vo" items="${list}" >
<tr>
<td>${vo.idx}</td>
<td>${vo.title}</td>
<td>${vo.writer}</td>
<td>${vo.indate}</td>
<td>${vo.count}</td>
</tr>
</c:forEach>
</table>
forEach로 vo에 있는 값을 가져오는 반복문을 써서 값을 꺼내준다
해당 내용을 정리해보자.
톰캣에서 서버를 시작하면 클라이언트의 요청을 받을 준비할 상태가 된다.
톰캣은 제일 먼저 web.xml을 확인한다.
2. 데이터베이스 연동
인터페이스와 Mapper.xml의 연결 방식은 인터페이스에 작성한 메소드를 mapper에 id값을 동일하게 만들어서 작성한다.
또 다른 방법으로는 어노테이션을 이용해서 만들 수 있는데, 예를 들어 @Delete어노테이션을 만들어서 직접 만들었다면 중복으로 작성해서는 안된다.
그럼 전체적인 그림을 살펴보자
컨트롤러가 엔터페이스를 이용해서 mapper에 있는 메서드를 호출한다. 그러면 메퍼에서 DB에 연결된 정보를 받고 다시 컨트롤러로 전송한다. 뷰네임을 보내면 viewResolver가 경로를 만들어서 다시 DispatcherServlet으로 보내게 된다. 그럼 jsp파일로 포워딩하고 결과를 클라이언트에게 보내게 되는것이다.
여기서 가장 중요한 의문점은 Mapper와 Controller가 어떻게 연결이 되냐는 부분이다.
만들어져 있는 객체를 Controller에서 주입을 받는걸 의존성주입(DI)이라고 한다.
해당 내용은 인프런 박매일강사님의 스프링 프레임워크는 내 손에 [스프1탄] 강의 정리내용입니다.