9. Controller - Service - Query 연동 및 테스트

1. Request Url Mapping 추가

   - context:component-scan : @Controller, @Service, @Repository, @Component 등의 Annotation을 붙인 클래스를 bean으로 자동 등록한다.

   - base-package를 기준으로 스캔, 클래스 로딩, bean 정의 및 생성

   - src > main > webapp > WEB-INF > spring > appServlet > servle_context.xml

<context:component-scan base-package="com.hhkim.homepage" />

<!-- Request Url Mapping (controller) -->
<!-- base-package : controller 파일 존재 패키지, 2가지 형태로 사용가능 -->
<context:component-scan base-package="com.hhkim.homepage.controller, *.*.*.controller" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

<!-- Request Url Mapping (service) -->
<!-- base-package : service 파일 존재 패키지, 2가지 형태로 사용가능 -->
<context:component-scan base-package="com.hhkim.homepage.service, *.*.*.service" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>

 

2. Qry Mapping 위치 변경

   - Mapper 위치 설정, 아래 코드의 mapperLocations 부분에서 설정

   - rc > main > webapp > WEB-INF > spring >root-context.xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:config/mybatis-config.xml" />
    <property name="mapperLocations" value="classpath*:/**/query/*Qry.xml" />
</bean>

 

3. 컨트롤러 폴더 및 파일 생성

   - core 단은 해당 컨트롤러 혹은 서비스에 상속될 코드

   - src > main > java > com > hhkim > homepage > controller > testController.java

   - src > main > java > com > hhkim > homepage > query> testQry.java

   - src > main > java > com > hhkim > homepage > service> testService.java

   - src > main > java > com > core> base> BaseController.java

   - src > main > java > com > core> base> BaseService.java

 

   - testController.java

package com.hhkim.homepage.controller;

import java.util.Map;

import javax.annotation.Resource;

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.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.hhkim.homepage.HomeController;
import com.hhkim.homepage.service.testService;

import core.base.BaseController;


@Controller
@RequestMapping("/base")
public class testController extends BaseController {
	
	@Resource
	private testService tSvc;
	
	@RequestMapping("/test")
	public ModelAndView testRequest(@RequestParam Map<String, Object> iParam) {
		Map<String, Object> rtMap	= null;
		
		try {
			System.out.println("testRequest 컨트롤러 호출 확인");
			
			rtMap = tSvc.testSRequest(iParam);
						
		}catch(Exception e) {
			System.out.println("testRequest Error  : " + e.toString());
			
		}
		
		ModelAndView modelAndView = new ModelAndView("jsonView", rtMap);
		
		System.out.println("modelAndView 결과 확인 : " + modelAndView);
		
		return modelAndView;
		
	}

}

 

   - testQry.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="testQry">

<select id="selTestTime" resultType="java.lang.String">
	/* LaborQry.selTestTime*/
	SELECT	TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS')
	FROM	DUAL
</select>

</mapper>

 

   - testService.java

package com.hhkim.homepage.service;

import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import core.base.BaseService;

@Service
public class testService extends BaseService {

    public Map<String, Object> testSRequest(Map<String, Object> iParam) throws Exception {

    	Map<String, Object> rtMap = new HashMap<String, Object>();
    	
    	String resultQry = "";
    	
    	try {
    		
    		resultQry = sqlSession.selectOne("testQry.selTestTime", iParam);
    		rtMap.put("KeyValue", resultQry);

    		System.out.println("INPUT 변수 확인 : " + iParam);
    		System.out.println("rtMap 결과값 확인 : " + rtMap);
    		
    	}catch(Exception e) {
    		System.out.println("오류 확인 : " + e.toString());
    		
    	}
    	
    	return rtMap;
    	
	}

}

 

   - BaseController.java

package core.base;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BaseController {
	
	protected Logger logger = LoggerFactory.getLogger(this.getClass());

	
}

 

   - BaseService.java

package core.base;

import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

public class BaseService {
	@Autowired
	protected SqlSession sqlSession;

    public void setSqlSession(SqlSession sqlSession){
        this.sqlSession = sqlSession;
    }

    protected Logger logger = LoggerFactory.getLogger(this.getClass());
    
}

 

4. 컨트롤러 및 서비스, Qry 적용 확인

   - 인터넷 주소창 : http://localhost:8080/homepage/base/test

   - Console 창에서 확인 가능

 

5. ERROR CHECK

   - 1) controller나 service 오류 메시지가 생성될 시 어노테이션 확인 및 () 속의 경로를 확인한다

   - 2) servlet-context.xml의 base-package 경로 확인

   - 3) @Resoure 오류 확인 이후 maven에서 설치 시 오류가 발생했을 수도 있으므로 File > Properties > Java Build Path > Libraries > Maven Dependencies 목록을 펼쳐 확인

   - 4) 그 외에도 설정 파일 오류 시 실행되지 않을 수 있음