스프링 게시판 스터디 10 - Service 객체 생성
December 04, 2018
참고
- 네이버블로그 - 꿈꾸는 개발자
- 이 블로그의 첫번째 사진을 보시면 Controller와 DAO 사이에 Service라는 객체가 끼어 있습니다.
- Controller가 무거워지는 것을 방지하기 위해, 여러개의 매퍼가 있는경우 의미가 명확한 것 끼리 나누기 위해 Service객체를 사용하는 것 같은데 아직 감은 안잡히네요.
- 일단 설정하는 법만 공유하겠습니다.
10-1 패키지 - 파일 생성
- com.javalec.bbs_prac.service 패키지
- BoardService 인터페이스
- BoardServiceImpl 클래스 (서비스)
10-2 BoardService 인터페이스 설정
package com.javalec.bbs_prac.service;
import java.util.ArrayList;
import com.javalec.bbs_prac.dto.BDto;
public interface BoardService {
public ArrayList<BDto> list();
public void delete(int bId);
public void write(String bUsername, String bTitle, String bContent);
public BDto content_view(int bId);
public void content_count(int bId);
public BDto update_view(int bId);
public void update(String bUsername, String bTitle, String bContent, int bId);
public ArrayList<BDto> search(String search);
}
10-3 BoardServiceImpl 서비스 클래스 설정
package com.javalec.bbs_prac.service;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.javalec.bbs_prac.dao.IDao;
import com.javalec.bbs_prac.dto.BDto;
// 이 클래스는 서비스로 활용됨을 알려주려고 @Service 어노테이션을 사용합니다.
// boardService라는 이름을 지정해서 나중에 Controller와 연결됩니다
@Service("boardService")
public class BoardServiceImpl implements BoardService {
// Autowired로 DAO와 연결됩니다.
// Controller - Service - Dao 로 연결되는 구조임을 다시 생각해주세요
@Autowired
IDao dao;
// 다형성을 이용해서 IDao 인터페이스가 가지고 있는 메서드를 오버라이딩 하고 있습니다
@Override
public ArrayList<BDto> list(){
return dao.list();
}
@Override
public void delete(int bId) {
dao.delete(bId);
}
@Override
public void write(String bUsername, String bTitle, String bContent) {
dao.write(bUsername, bTitle, bContent);
}
@Override
public BDto content_view(int bId) {
return dao.content_view(bId);
}
@Override
public void content_count(int bId) {
dao.content_count(bId);
}
@Override
public BDto update_view(int bId) {
return dao.update_view(bId);
}
@Override
public void update(String bUsername, String bTitle, String bContent, int bId) {
dao.update(bUsername, bTitle, bContent, bId);
}
@Override
public ArrayList<BDto> search(String search) {
return dao.search(search);
}
}
10-4 BController 변경
- 위에서 @Service(“boardService”) 부분과 연결됩니다
- sqlSession대신에 Service객체를 Autowired 해서 사용합니다
@Autowired
private BoardService boardService;
// 이부분이 원래 sqlSession으로 되어 있었을 거에요. 바꿔줍니다.
// 이제 매번 getMapper하는 부분을 안해도 됩니다.
// dao 대신 boardService로 메서드를 호출하고 있어요.
@RequestMapping("/list")
public String list(Model model) {
logger.info("list()");
// IDao dao = sqlSession.getMapper(IDao.class);
model.addAttribute("list", boardService.list());
return "list";
}
@RequestMapping(value="/list", params="search")
public String list(HttpServletRequest request, Model model) {
logger.info("list with search()");
// IDao dao = sqlSession.getMapper(IDao.class);
model.addAttribute("list", boardService.search(request.getParameter("search")));
return "list";
}
@RequestMapping("/delete")
public String list(HttpServletRequest request) {
logger.info("delete()");
// IDao dao = sqlSession.getMapper(IDao.class);
boardService.delete(Integer.parseInt(request.getParameter("bId")));
return "redirect:list";
}
@RequestMapping("/write_view")
public String write_view() {
logger.info("write_view()");
return "write_view";
}
@RequestMapping("/write")
public String write(HttpServletRequest request) {
logger.info("write()");
// IDao dao = sqlSession.getMapper(IDao.class);
boardService.write(request.getParameter("bUsername"), request.getParameter("bTitle"), request.getParameter("bContent"));
return "redirect:list";
}
@RequestMapping("/content_view")
public String content_view(HttpServletRequest request, Model model) {
logger.info("content_view");
// IDao dao = sqlSession.getMapper(IDao.class);
boardService.content_count(Integer.parseInt(request.getParameter("bId")));
model.addAttribute("list", boardService.content_view(Integer.parseInt(request.getParameter("bId"))));
return "content_view";
}
@RequestMapping("/update_view")
public String update_view(HttpServletRequest request, Model model) {
logger.info("update_view()");
// IDao dao = sqlSession.getMapper(IDao.class);
model.addAttribute("list", boardService.update_view(Integer.parseInt(request.getParameter("bId"))));
return "update_view";
}
@RequestMapping("/update")
public String update(HttpServletRequest request) {
logger.info("update()");
// IDao dao = sqlSession.getMapper(IDao.class);
boardService.update(request.getParameter("bUsername"), request.getParameter("bTitle"), request.getParameter("bContent"), Integer.parseInt(request.getParameter("bId")));
return "redirect:list";
}
10-5 root-context.xml 에서 IDAO 빈객체로 등록
- 다음 코드를 추가해 주세요.
- mapper가 아니라 인터페이스를 빈객체로 등록시키고 있다는 걸 주의해서 봐야 할 것 같습니다.
<!-- Mapper 인터페이스를 빈객체로 등록 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.javalec.bbs_prac.dao" />
</bean>