이전글에는 스프링 mvc 게시판을 만들기 위한 기본적인 셋팅을 다루었고, 오늘 글에서는 Controller부터 DB작업까지
어떻게 이루어지는지 만들어 보도록 하겠다.
- 기본 패키지 아래에 controller, service, dao 패키지를 만들어 주었다.
- 프로젝트 패키지의 구성은 아래처럼 나눌 수도 있고, 업무 단위로도 나눌 수 있다고 한다.(e.g 로그인, 쇼핑 등등)
- 패키지를 만들었으면, service와 dao 패키지에 service와 dao Interface를 먼저 만들어주고,
- 각 패키지에 각각의 interface를 구현한 class를 아래 그림과 같이 만들어 준다.
- service 인터페이스 소스
- 처음 인터페이스를 만들면 텅텅 비어있기 때문에 아래와 같은 메서드를 작성해준다
package com.sts.example.service;
import java.util.HashMap;
import java.util.List;
public interface MvcService {
List<HashMap<String, Object>> select() throws Exception;
}
- service 인터페이스 구현 객체 소스
- 서비스에서 메서드를 만들면, 구현 객체에 컴파일 에러가 뜨는데, 이는 인터페이스에 있는 메서드가 구현 객체에
없기 때문이다.
- 우리는 인터페이스의 메서드를 오버라이드 해줄 것이기 때문에 클래스 이름에 커서를 두고 [F2]를 누르면,
[Add unimplemented methods..]가 나오는데 이것을 클릭해도 되고, 오버라이드 메소드를 직접 작성해도 된다.
- @Autowired라는 어노테이션은 의존성을 주입해주는 단계인데, 객체를 싱글톤으로 관리해준다.
- 이 싱글톤에 대해서는 다음에 자세하게 설명하도록 하고, 아래 소스와 같이 dao의 의존성을 주입해주자
package com.sts.example.service;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.sts.example.dao.MvcDAO;
@Service
public class MvcServiceImpl implements MvcService {
@Autowired
MvcDAO dao;
@Override
public List<HashMap<String, Object>> select() throws Exception {
// TODO Auto-generated method stub
return dao.select();
}
}
- dao 인터페이스 소스
- 서비스와 같이 인터페이스 역할을 하기 때문에 메서드만 명시해주자
package com.sts.example.dao;
import java.util.HashMap;
import java.util.List;
public interface MvcDAO {
List<HashMap<String, Object>> select()throws Exception;
}
- dao 인터페이스 구현 객체 소스
- 여기서 의존성은 sqlSession을 주입해주는데, 이 객체는 우리가 아까 작성한 BoardMapper.xml과 매칭을 시켜준다.
- namespace라는 필드는 BoardMapper.xml의 mapper namespace에 지정해준 값을 넣어주는데, 변하지 않는 필드라
final로 선언해주었다.
- dao 구현 객체도 service 구현 객체와 같이 클래스 이름에 컴파일 에러가 표시될텐데, 아까와 같이 구현되지 않은
메서드를 구현해주자.
package com.sts.example.dao;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class MvcDAOImpl implements MvcDAO {
@Autowired
SqlSession sqlSession;
private static final String namespace = "com.sts.example.BoardMapper";
@Override
public List<HashMap<String, Object>> select() throws Exception {
// TODO Auto-generated method stub
return sqlSession.selectList(namespace+".select");
}
}
- 컨트롤러 소스
- 서비스를 의존성 주입해주고,
- @RequestMapping 어노테이션은 우리가 value로 지정한 url요청을 스프링이 필터링해서 컨트롤러로 연결해주는
역할을 한다. get으로 보낼건지 post로 보낼건지에 따라 아래와 같이 코딩해준다.
- Model클래스는 뷰로 올려줄 데이터를 다루는 역할을 한다.
- 우리는 데이터를 DB로 부터 '받아오는' 메서드를 만들었기 때문에 리턴 타입이 있고, service와 리턴 타입이 맞는
변수를 작성하고, service의 메서드를 아래 소스와 같이 대입해준다.
- 아래 return 값에 board를 적어주었는데, 이는 [servlet-context.xml]에 명시되어있는 경로를 이 스트링 값에
매칭을 시켜줘서 /WEB-INF/views/ + board + .jsp 경로에 있는 파일을 리턴해준다.
- 이 리턴값으로 화면에 뿌려주는 역할을 하는게 뷰리졸버(설명이 길어지므로 다음에 설명...)
package com.sts.example.controller;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.sts.example.service.MvcService;
@Controller
public class MvcController {
@Autowired
MvcService service;
@RequestMapping(value = "/board",method = RequestMethod.GET)
public String board(Model model) throws Exception{
List<HashMap<String, Object>> list = service.select();
model.addAttribute("boardList", list);
return "board";
}
}
- 아래는 그동안 작성한 mvc 설정 파일에 맞게 만들 뷰 화면과 데이터 베이스
'Spring Framework > spring' 카테고리의 다른 글
@RequestBody와 @ModelAttribute (0) | 2020.04.29 |
---|---|
스프링 tiles(타일즈) 설정하기 (0) | 2019.08.12 |
스프링 MVC 설정으로 게시판 만들기 Part_1 (0) | 2019.08.09 |
스프링 프로젝트 - 트랜잭션 Part_2 (0) | 2019.08.08 |
스프링 프로젝트 - 트랜잭션 설정 Part_1 (0) | 2019.08.08 |