참고

  • 네이버블로그 - 꿈꾸는 개발자
  • 이 블로그의 첫번째 사진을 보시면 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>

확인해보자