[Spring] Mybatis+Annotation

김장환·2022년 8월 30일

Spring

목록 보기
11/17

이전에 했던 Mybatis를 적용한 게시판에 어노테이션을 적용하고자한다.
기존에 했던것들처럼 순서대로 진행하면서 정리하고자 한다.

POJO클래스

우선 pojo클래스를 먼저 정리하고자한다

POJO클래스 개요
Controller인터페이스나 AbstractCommandController추상클래스를 상속받지 않아도 독립적으로 사용자로부터 요청을 받아서 처리해줄 수 있는 기능을 가진 클래스

특징

  • 인터페이스 or 추상클래스를 상속받지 않아도 된다.

  • @Controller를 부여->자동적으로 컨트롤러가 된다.

  • 요청을 받아서 처리해주는 메서드를 내마음대로 변경이 가능하다.=>종속X
    =>매개변수도 내마음대로 설정이 가능


index.jsp 수정

  • 실행해줄때 사용하는것으로 우선 이거먼저 미리 수정해주려한다.
<%
response.sendRedirect("http://localhost:8090/SpringAnno/list.do");
%>

글목록보기

board-servlet.xml에 추가 및 수정

  • @Autowired,@Required를 사용하기위한 환경설정 빈을 넣어준다
  • 글목록보기 수정 (property부분 싹 지움)

<!-- @Autowired,@Required -->
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

~생략~
<!-- <bean name="/list.do"  class="lee.ListActionController">
  <property name="dao">
     <ref bean="boardDAO" />
  </property>
</bean> -->
이걸 
<bean name="/list.do"  class="lee.ListActionController" />
이렇게 생략해서 바꿔준다

이러면 dao를 불러오지 못하니까 에러뜬다 따라서 컨트롤러에 어노테이션들을 적용해준다

ListActionController 수정

  • Controller 상속을 지우거나 주석해주고 대신 @Controller를 적용 (컨트롤러 역할을 해주기위해 적용)
  • setDao에 @Required, Autowired를 적용
  • @RequestMapping("/list.do")을 적용 (=>@Override 지워주고)

@Controller란? : 요청을 받아서 처리해주는 컨트롤러역할을 해주는 어노테이션

Controller 와 @RequestMapping은 컨트롤러에서 필수다

package lee;

import java.util.List;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//import org.springframework.web.servlet.mvc.Controller;


//public class ListActionController implements Controller {
//요청을 받아서 처리해주는 컨트롤러역할을 해주는 어노테이션
@Controller
public class ListActionController{
	
	BoardDAO dao;//BoardDAO dao=new BoardDAO(); 스프링컨테이너가 해준다.
	
	//<property name="dao"> <ref bean="boardDAO()" ~  <= 이거 생략가능 (어노테이션 적용해서)
	@Required
	@Autowired
	public void setDao(BoardDAO dao) {//<property name="dao"><ref bean~
		this.dao = dao;
		System.out.println("setDao() 호출됨(dao)=>"+dao);
	}

	public void hello() {
		System.out.println("hello");
	}
	
	@RequestMapping("/list.do") // 다른 메서드 여러개있을때 내가 지정해주는 메서들 요청할때 사용 => 요청명령어에 따른 처리해줄 메서드를 지정해줄때 사용하는 어노테이션
	public ModelAndView handleRequest(HttpServletRequest request,
			                                              HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("ListActionController의 handleRequest()호출됨");
		//ArrayList list=dao.list();
		List list=dao.list();
		//화면에 출력할 list.jsp에 전달할 페이지명과 전달할값을 설정하기위해 
		ModelAndView mav=new ModelAndView();//viewName 멤버변수
		mav.setViewName("list");//이동할 페이지명만 확인->경로? 확장자?
		mav.addObject("list",list);//request.setAttribute("list",list);
		//mav.addObject("키명",전달할값),,,,
		//${list(키명)}  request.getAttribute("list");
		return mav;
	}
}


글쓰기

board-servlet.xml 수정

  • 글쓰기 이동폼부분은 그대로 놔둔다
  • 글쓰기 수정 (property부분 싹 지움)
<bean name="/write.do"  class="lee.WriteActionController" />
밑에꺼를 이렇게 간략하게 바꿔준다
<!-- before
<bean name="/write.do"  class="lee.WriteActionController">
  <property name="dao">
     <ref bean="boardDAO" />
  </property>
  <property name="commandClass" value="lee.BoardCommand"/>
</bean> 
-->

WriteActionController 수정

  • 전체 클래스에 @Controller적용
  • 멤버변수에 @Autowired적용
  • @RequestMapping 적용 => 메서드이름 바꿔도된다 (=test로 바꿔보려한다)
  • @RequestParam적용 => 메서드의 매개변수처리
    =>request.getParameter(" ") 대신 사용
  • 매개변수 처리해준거(입력을 받은거) 넣어준다 =>data.set~으로
package lee;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

//입력을 받아서 처리(글쓰기,글수정,로그인),입력X 처리해주는경우(페이지 이동(글쓰기폼),글상세보기,글삭제
//public class WriteActionController extends AbstractCommandController {
@Controller
public class WriteActionController {

	@Autowired
	BoardDAO dao;
	
	/* 위에 멤버변수에 @Autowired를 적용하면 생략가능
	public void setDao(BoardDAO dao) {
		this.dao = dao;
		System.out.println("setDao()호출=>"+dao);
	}*/
	
     //String title=request.getParameter("title") 이걸 어노테이션으로 바꾸려면
	// => 메서드의 매개변수처리 @RequestParam("매개변수명") 반환자료명
	@RequestMapping("/write.do")
	protected ModelAndView test(@RequestParam("title") String title,
											   @RequestParam("author") String author,
											   @RequestParam("content") String content)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("WriteActionController 실행됨!");
		//request.setCharacterEncoding("utf-8");//한글처리
		BoardCommand data=new BoardCommand(); 
		//확인

		//최대값 구하기(계산해서 넣을것)
		int newNum=dao.getNewNum()+1;
		data.setNum(newNum);//5->6->7
		//추가(입력을 받아서 넣어준다.)
		data.setTitle(title);
		data.setAuthor(author);
		data.setContent(content);
		//-----------------------------------------------
		dao.write(data);//->getNum()호출해서 #{num}에 전달된다.
		return new ModelAndView("redirect:/list.do");
	}
}

나머지는 다음에 이어서


2022-08-30

0개의 댓글