web developer

[egov] EgovMap이란? EgovMap으로 데이터 가져오기 본문

Framework/Egovframework [spring]

[egov] EgovMap이란? EgovMap으로 데이터 가져오기

trueman 2022. 2. 17. 00:02
728x90
728x90

EgovMap ?

1) 전자정부프레임워크에서 제공하는 제네릭 타입 (java의 Map클래스와 동일)
2) Map형태의 클래스로 iBatis(myBatis) parameterClass 또는 resultClass에서 사용할 수 있도록 제공되는 클래스


일반적인 resultClass와 차이점은 egovMap은 자동으로 컬럼을 맵핑할 수 있는 객체이름을 생성해 준다.

 

데이터베이스에서 SELECT user_id FROM user WHERE name="홍길동" 이라는 SQL문을 통해 유저의 아이디(user_id)를 사용하고자 할때, map.get("user_id")와 같이 column명으로 참조를 하게 되는데 egovMap을 사용하면 camelcase의 규칙에 따른 이름으로 객체를 참조할 수 있다.

즉, 컬럼 명이 user_id 라면 userId로 참조, 컬럼 명이 userId라면 userid로 참조하게 된다. 컬럼명의 _다음 알파벳은 대문자로 인식하며 컬럼명에서 대문자는 그대로 소문자 변수로 맵핑된다.


출처 : https://blog.naver.com/PostView.nhn?blogId=mklmkl2001&logNo=220934471615&parentCategoryNo=&categoryNo=16&viewDate=&isShowPopularPosts=true&from=search 


Controller.java


package egovframework.board.web;

import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class EgovBoardController {
	
    @Resource
	private BoardService boardService;
    
	@RequestMapping(value="/SelectBoardList.do")
	public String boardList() throws Exception {
		
		List<EgovMap> List = boardService.SelectBoardList();
		return list;
	}
}

컨트롤러에서 서비스에 접근하기 위해 서비스의 메서드명을 작성하여야 합니다.

여기서의 메서드는 Service Interface에 명시될 메서드를 의미하며, 메서드명의 명명규칙은 통상적으로 select+조회할대상+service+List로 작성합니다.

여기서는 단순조회를 하는것이므로 select를 사용하고, Service는 서비스로 접근하기 때문에, List는 List형식으로 받을것이기 때문입니다. 


BoardService.java


package egovframework.dataReqRes.service;
import java.util.List;
import egovframework.board.menu.vo.ParamVO;
import egovframework.rte.psl.dataaccess.util.EgovMap;

public interface BoardService {
	List<EgovMap> SelectBoardList(ParamVO pVO) throws Exception;
}

Interface 파일에는 예외처리 구문인 throws Exception가 자동 생성되지 않기 때문에 아래 소스와 같이 추가합니다.


BoardServiceImpl.java


package package egovframework.board.service.impl;
import java.util.List;
import org.springframework.stereotype.Service;
import egovframework.board.menu.vo.ParamVO;
import egovframework.board.service.BoardService;
import egovframework.rte.psl.dataaccess.util.EgovMap;

@Service("BoardService")
public class BoardServiceImpl implements BoardService{
	
    @Resource(name="boardDAO")
    private BoardDAO boardDAO;
    
	@Override
	public List<EgovMap> SelectBoardList(ParamVO pVO) throws Exception {
		list<EgovMap> list = boardDAO.SelectBoardList(pVO);
		return list;
	}
}

ServiceImpl는 비즈니스 로직을 구현하는 파일이므로, 이 파일이 Service 파일임을 의미하는 @Service를 작성합니다.

또한, Service Interface에 명시된 추상 메서드를 구현하기 위해 ServiceInterface를 implements 받습니다.


​ServiceImpl에서는 BoardDAO.SelectBoardList()를 호출합니다. 단순 조회여서 별다른 업무로직이 없이 DAO를 호출합니다.


DAO


package package egovframework.board.service.impl;
import java.util.List
import org.springframework.stereotype.Repository;
import egovframework.board.menu.vo.ParamVO;
import egovframework.rte.psl.dataaccess.util.EgovAbstractDAO;
import egovframework.rte.psl.dataaccess.util.EgovMap;

@Repository("BoardDAO")
public class BoardDAO extends EgovAbstractDAO {

    public List<EgovMap> selectSampleList(ParamVO pVO) throws Exception {
    	list<EgovMap> list = (List<EgovMap>)list("BoardSQL.SelectBoardList", pVO);
        return list;
    }
    
}

​DAO는 Data Access Object의 약자로 데이터베이스에 접근하기 위한 역할을 수행합니다.

BoardDAO는 EgovAbstractDAO를 상속받았습니다. EgovAbstractDAO는 CRUD와 관련한 대표적인 method를 간단하게 호출할 수 있도록 제공합니다.


BoardSQL.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="BoardSQL"
	<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
	<typeAlias alias="ParamVO" type="egovframework.board.menu.vo.ParamVO"/>
    
	<select id="SelectBoardList"  resultClass="egovMap" resultClass="ParamVO">
		SELECT	MNGNUM,	
			NAME,		
			AGE,	
			GENDER,	
			COUNTRY
		FROM Exam_Board
	</select>
</sqlMap>

* id 속성
- 작성된 쿼리를 식별하기 위한 이름 설정한다.
- 동일한 이름을 사용할 수 없다.


* parameterClass 속성         
- 쿼리실행에 필요한 값을 포함하고 있는 클래스의 타입을 설정한다.
- 기본자료형, ValueObject, Map 타입을 설정할 수 있다.


* resultClass 속성 

- 쿼리실행 후 조회된 값을 담는 클래스의 타입을 설정한다.
- SELECT 쿼리일때만 사용된다.
- 기본자료형, ValueObject, HashMap 타입을 설정할 수 있다.

- resultClass="egovMap"는 key값을 camelCase으로 바꿔줍니다.

 

* camelCase

- 시작은 소문자로 시작하며 단어변경 시 첫문자를 대문자로 표기하는 방법. _(언더바)는 삭제함.
- USE_YN -> useYn


* resultMap 속성

// 파일 내부에서 생성된 resultMap
<resultMap id="sample" class="board.sample.service.SampleVO">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="description" column="description"/>
    <result property="useYn" column="use_yn"/>
    <result property="regUser" column="reg_user"/>
</resultMap>
    
// resultMap을 참조
<select id="sampleDAO.selectSample" resultMap="sample">
    <![CDATA[
        SELECT
            ID, NAME, DESCRIPTION, USE_YN, REG_USER
        FROM SAMPLE 
        WHERE ID=#id#
    ]]>
</select>

출처 : https://elvis-note.tistory.com/entry/10-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EB%8B%AC%EB%B0%A9%EC%8B%9D-2-EgovMap%EC%9C%BC%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A1%B0%ED%9A%8C


출처 : https://javafactory.tistory.com/490?category=451240 


728x90
728x90