프로그래밍/전자정부프레임워크(eGov)

레프트 메뉴 추가 후 서비스단을 만들어보자! - (3) 맵퍼적용

Jay22 2017. 2. 4. 19:55
반응형



service 폴더안에 impl폴더안에 WelcomeWebMapper라는 인터페이스를 만든다.


1
2
3
4
@Mapper("welcomeWebMapper")
public interface WelcomeWebMapper {
    
    List<Map> selectWelcomeWebServiceList() throws Exception;
}
cs



이렇게 함수머리만 선언한다. 이 함수는 디비에서 값을 가져오는 함수이다. 저렇게 일단 놔두고 WelcomeWebServiceImp로 가자. 서비스 임플은 나중에 트랜잭션까지 관리하게 된다. 어노테이션도 맵퍼로 조져준다.




1
2
3
4
5
6
7
8
9
10
@Service("welcomeWebService")
public class WelcomeWebServiceImpl extends EgovAbstractServiceImpl implements WelcomeWebService{
    
    @Resource(name="welcomeWebMapper")
    private WelcomeWebMapper welcomeWebMapper;
    
    public List<Map> selectWelcomeServiceList() throws Exception {
        return welcomeWebMapper.selectWelcomeWebServiceList();
    }
}

cs





아까 만든 맵퍼를 추가해준다. 오타가 나기 쉬우므로 복사해서 붙여넣는 식으로 변수를 만들자.
line 8 은 아까 맵퍼에서 선언한 함수를 쓴다. 

cf) Controller->Service->Impl->Mapper->sql  로 흐름이 이어지고 sql에서 데이터를 받은 후 다시 거꾸로 거슬러 올라가는 연어처럼 되돌아간다.


쿼리문 맵퍼등록을 해야 한다.
그리고 resources/egovframework/sqlmap/example/mappers 로 가보자.







mappers폴더에 WelcomeWeb_SQL.xml을 위에 샘플 파일을 복사해서 만들고 이름만 바꾸자.
그리고 안에 <mapper> 태그가 있을 것이다. 안에 내용을 모두 지우자. 그리고 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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="egovframework.example.welcomeWeb.service.impl.WelcomeWebMapper">
 
   <!-- 메인 조회 -->
   <select id="selectWelcomeWebServiceList" resultType="egovMap">
      SELECT ID,
          USER_NAME,
          AGE,
          COUNTRY,
          ETC
      FROM welcome_web
   </select>
   
   <select id="selectPieChartList" resultType="egovMap">
      SELECT ROUND(A.CNT/(SELECT count(*) TOTCNT 
                     FROM   welcome_web)*100) AS PERCENT
          , COUNTRY  
      FROM (SELECT count(COUNTRY) as CNT, COUNTRY 
            FROM welcome_web group by COUNTRY) A   
   </select>
 
</mapper>
cs


셀렉트 구문들을 추가하자. 이것이 Mybatis이다. 중요한 것은 위에 mapper 네임스페이스 형광펜 부분을 보자. 아까 만든 서비스단에서 맵퍼를 호출하도록 만들었으니 그 맵퍼의 경로를 적어준다. 확인하는 방법은 ctrl키를 누른후 저 경로를 클릭해보자. 맵퍼로 이동이 된다면 제대로 등록한 것이다.

그리고 이 xml파일의 id값이 아까 맵퍼 인터페이스의 함수명과 같아야한다. 그래야 맵핑이 된다.

안에 쿼리는 맘대로 쓰고 오라클에 데이터를 만들자.


서비스를 다시한번 보자.

1
2
3
4
5
6
7
public interface WelcomeWebService {
 
    List<Map> selectWelcomeServiceList() throws Exception; // 표 리스트 받아오는 동작
 
    List<Map> selectPieChartList() throws Exception; // 차트 받아오는 동작
}
 
cs


밑에 함수 추가 되었는데 뭐 기능에 따라 더 있을수도 있고 없을수도 있는 숫자이다.


밑에는 완성된 컨트롤러의 모습이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Controller
public class WelcomeWebController {
 
    @Resource(name="welcomeWebService")
    private WelcomeWebService welcomeWebService;
    
    @RequestMapping(value="welcomeWeb.do")
    public String initWelcomeWeb(ModelMap model) throws Exception {
        
        // 표의 정보를 요청한다.
        List<Map> welcomeWebList = welcomeWebService.selectWelcomeServiceList();
 
        List<Map> pieChart = welcomeWebService.selectPieChartList();
        
        model.addAttribute("welcomeWebList", welcomeWebList);
        model.addAttribute("pieChartList", pieChart);
        
        return "welcomeWeb/welcomeWeb.tiles";
    }
}
cs




추가하는 함수에 따라 맵퍼에도 함수를 정의한다.

마지막으로 welcomeWeb.jsp를 정의한다.

그리고 돌려보면 페이지가 나오게 된다. 오타와 패키지 구조에 조심하자.

반응형