다가오는 다음을 향해

[Spring MVC] 기본동작 구현 본문

국비학원 공부노트/Spring MVC

[Spring MVC] 기본동작 구현

hyeseo 2022. 3. 15. 12:14

[ 개발환경 ]

MacBook Air M1 2020년형 

eclipse [2021-3 var]

Java [zulu-8]

JSP

Tomcat [Apache Tomcat/9.0.58]

 

[ version ]
- springframework - 4.3.14
- aspectj - 1.8.9
- Test - 4.12

Maven repository
- mysql-connector-java  8.0.27
- spring-jdbc - 4.3.14
- spring-test - 4.3.14 

mybatis - 3.4.4
mybatis-spring - 1.3.1


기본동작구현

 

✎ 예제 : Emp 테이블의 전체 사원수를 구하세요. (param 없음)

- 요청할 파라미터가 없어도 된다
- 반환타입은 int 이다.

 

 

실행 순서는 Controller->Service->DAO->mybatis 이지만

 

DAO는 mybatis를 호출

Service는 DAO 메소드를 호출하기 때문에

호출해야하는 순서의 반대로 work를 작성해야한다.

 

 

 

 

 

1. view


<a href="empcount">전체사원수 출력:</a>${cnt}

 

 

 

2. emp package 및 Contoller 작성


package kr.co.dong.emp;

public class EmpController {
	
}

 

 

 

3. empDAO, empService Interface 작성


▼ EmpDAO.java

package kr.co.dong.emp;

public interface EmpDAO {
	
	public int empCount() throws Exception;

}

▼ EmpService.java

package kr.co.dong.emp;

public interface EmpService {
	public int empCount() throws Exception;
}

 

 

4. empMapper.xml 에 sql 질의문 작성


empMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.co.dong.empMapper">
	<select id="cnt" resultType="int">
		select count(*) from emp
	</select>
</mapper>

* 주의점

처음엔 질의문을 한꺼번에 작성하지 말고 1개씩 작업하여 확인해야한다.

( mapper 오류 시 Server 동작하지 않기 때문에 오류 원인을 찾는데 시간소요)

 

 

 

5. contrller 구현


EmpController.java

package kr.co.dong.emp;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import kr.co.dong.HomeController;

@Controller
public class EmpController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	@Inject
	private EmpService service; // 주입(new 생성) 관련된 interface호출
	
	@RequestMapping(value="empcount",  method=RequestMethod.GET)
	
	public ModelAndView empCount() throws Exception {
		logger.info("전체사원 수 조회로 이동");
		
		// service 호출하며 결과값 저장
		int cnt = service.empCount();

		ModelAndView mav = new ModelAndView();
		mav.addObject("cnt",cnt); // 결과값 주입
		mav.setViewName("main");  // view로 보냄
		return mav;
	}
}

 

 

6. EmpDAOImpl 구현


 1. @Repository ->클래스 위에 작성

 2. mybatis 객체 생성 (SqlSession클래스)

 3. mapper의 nameSpace를 지정

 

 EmpDAOImpl.java

package kr.co.dong.emp;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

@Repository
public class EmpDAOImpl implements EmpDAO {
	
	@Inject // or @Autowired
	private SqlSession sqlSession;
	

	@Override
	public int empCount() throws Exception {
		return sqlSession.selectOne("kr.co.dong.empMapper.cnt"); // nameSpase.ID , paramType
	}
}

 

 

 

7. EmpService 구현


1. @Repository ->클래스 위에 작성

2. @Inject로 EmpDAO 주입

 

 EmpServiceImpl.java

package kr.co.dong.emp;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

@Service
public class EmpServiceImpl implements EmpService {
	
	@Inject
	private EmpDAO dao; // 주입

	@Override
	public int empCount() throws Exception {
		return dao.empCount();
	}
}

 

 

 

 

결과 화면


 

[참고] sever 실행 시 404 에러 발생 시 확인 사항

1. consol 메세지 확인.

2. controller 확인.

3. DB. XML환경 깨졌는지 확인.