특정 공통상세코드 목록을 화면에 출력하고싶을 때나,
상세코드값에 따른 코드명을 화면에 출력하고 싶을 때에
매번 DB 조회를 해와야 하는데,
WAS 기동시 공통코드 정보를 DB에서 한번만 조회하여 메모리에 올려놓고,
필요할 때마다 사용하면
소스코드나 SQL가 간단해질 수 있고,
상태코드를 위해 DB 조회를 매번해야하는 DB 서버 부하도 줄일 수 있습니다.
그래서, 전자정부프레임워크 3.8 기반에서 작성한 소스를 올려놓습니다.
소스 마음껏 긁어다 쓰세요.
1. 개발 환경
- 전자정부프레임워크 3.8 (MyBatis 적용)
- egovFramework 공통코드 테이블 원본 사용
. 공통코드(comtccmmndetailcode)
. 공통코드그룹 (comtccmmncode)
2. 소스 구성
(1) CodeCacheService.java
- @PostConstruct 어노테이션을 사용하여 WAS 기동할 때,
공통코드 정보를 DB에서 조회하여 메모리에 저장
- codeGroupList와 codeList 변수를 static으로 선언
- codeGroupList을 synsynchronized
- CodeCacheService.java 소스(원본 전체)
package egovframework.hwang.code;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import javax.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.hwang.code.CodeCacheDAO;
/**
*
* 공통코드를 WAS 기동시 메모리에 캐싱하여 사용하도록 한다.
*
* @author Hwang Sanggyu
* @since 2019.06.12
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2019.06.12 황상규 최초 생성
*
* </pre>
*/
@Service("CodeCacheService")
public class CodeCacheService extends EgovAbstractServiceImpl {
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@Autowired
public CodeCacheDAO CodeCacheDAO;
private static List<EgovMap> codeGroup = new ArrayList<EgovMap>();
private static List<EgovMap> code = new ArrayList<EgovMap>();
/**
* 공통코드 메모리 등록
*/
@SuppressWarnings("unchecked")
@PostConstruct
public void resetCodeList() throws Exception {
if (codeGroup.isEmpty()) {
synchronized (codeGroup) {
if (codeGroup.isEmpty()) {
List<EgovMap> egovMapList;
// 코드 그룹
egovMapList = (ArrayList<EgovMap>)CodeCacheDAO.selectListCodeGroup(); // codeId, codeIdNm
codeGroup.clear();
codeGroup.addAll(egovMapList);
// 상세코드
egovMapList = (ArrayList<EgovMap>)CodeCacheDAO.selectListCode(); // codeId, code, codeNm
code.clear();
code.addAll(egovMapList);
}
}
}
}
public static void clear() throws Exception {
codeGroup.clear();
code.clear();
}
/**
* @param String codeId 코드그룹 ID
* @return String 그룹코드명
*/
public static String getCodeGroupNm(String codeId) throws Exception {
String returnVal = "";
Iterator<EgovMap> iterator = codeGroup.iterator();
while (iterator.hasNext()) {
EgovMap egovMap = (EgovMap) iterator.next();
if(codeId.equals((String)egovMap.get("codeId"))) {
returnVal = (String)egovMap.get("codeIdNm");
break;
}
}
return returnVal;
}
/**
* @param String codeId 코드그룹 ID
* @param String code 코드
* @return String 상세코드명
*/
public static String getCodeNm(String codeId, String detailCode) throws Exception {
String returnVal = "";
Iterator<EgovMap> iterator = code.iterator();
while (iterator.hasNext()) {
EgovMap egovMap = (EgovMap) iterator.next();
if(codeId.equals((String)egovMap.get("codeId")) && detailCode.equals((String)egovMap.get("code")) ) {
returnVal = (String)egovMap.get("codeNm");
break;
}
}
return returnVal;
}
/**
* @param String codeId 코드그룹 ID
* @return List<EgovMap> 코드그룹에 속한 상세 코드 List
*/
public static List<EgovMap> getCode(String codeId) throws Exception {
List<EgovMap> returnVal = new ArrayList<EgovMap>();
Iterator<EgovMap> iterator = code.iterator();
while (iterator.hasNext()) {
EgovMap egovMap = (EgovMap) iterator.next();
if(codeId.equals((String)egovMap.get("codeId"))) {
returnVal.add(egovMap);
}
}
return returnVal;
}
/**
* @param
* @return List<EgovMap> 상세 코드 List
*/
public static List<EgovMap> getCode() throws Exception {
return code;
}
}
(2) DAO
- 공통코드(comtccmmndetailcode)와 공통코드그룹 (comtccmmncode)정보 조회
- CodeCacheDAO.java 소스(원본 전체)
package egovframework.hwang.code;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
import egovframework.rte.psl.dataaccess.util.EgovMap;
/**
*
* 공통코드 정보를 조회온다.
*
* @author Hwang Sanggyu (urajilation@gmail.com)
* @since 2019.06.12
* @version 1.0
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2019.06.12 황상규 최초 생성
*
* </pre>
*/
@Repository("commonCodeDAO")
public class CodeCacheDAO extends EgovComAbstractDAO {
/**
* 공통코드그룹 List 조회
*
* @param
* @return
*/
public List<?> selectListCodeGroup() {
return selectList("CodeCacheDAO.selectListCodeGroup");
}
/**
* 공통코드상세 List 조회
*
* @param
* @return
*/
public List<?> selectListCode() {
return selectList("CodeCacheDAO.selectListCode");
}
}
(3) SQL
- CodeCache.xml 소스 원본 전체)
- 전자정부프레임워크의 공통상세코드 테이블(COMTCCMMNDETAILCODE)에 순서(ORDR) 컬럼을 추가했는데,
아래 sql에는 기본 형태로 사용할 수 있게 하려고 "ORDER BY ORDR"를 추가하지 않았음
<?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="CodeCacheDAO">
<select id="selectListCodeGroup" resultType="egovMap">
/* CodeCacheDAO.selectListCodeGroup */
<![CDATA[
SELECT
A.CL_CODE
, A.CL_CODE_NM
, A.CL_CODE_DC
, A.USE_AT AS CL_CODE_USE_AT
, B.CODE_ID
, B.CODE_ID_NM
, B.CODE_ID_DC
, B.USE_AT
FROM COMTCCMMNCLCODE A
, COMTCCMMNCODE B
WHERE A.CL_CODE = B.CL_CODE
AND A.USE_AT = 'Y'
AND B.USE_AT = 'Y'
ORDER BY A.CL_CODE_NM
, B.CODE_ID_NM
]]>
</select>
<select id="selectListCode" resultType="egovMap">
/* CodeCacheDAO.selectListCode */
<![CDATA[
SELECT
B.CODE_ID
, B.CODE_ID_NM
, C.CODE
, C.CODE_NM
, C.CODE_DC
, C.USE_AT
FROM COMTCCMMNCODE B
, COMTCCMMNDETAILCODE C
WHERE B.CODE_ID = C.CODE_ID
AND B.USE_AT = 'Y'
AND C.USE_AT = 'Y'
ORDER BY B.CODE_ID_NM
, C.CODE_DC
]]>
</select>
</mapper>
(4) 사용 방법
- jsp에서 사용 예
<%=egovframework.hwang.code.EjinCodeCacheService.getCodeNm("CDG131", "KANGWON") %>
<br><br><br>
<%=egovframework.hwang.code.EjinCodeCacheService.getCodeGroupNm("CDG131") %>
<br><br><br>
<%=egovframework.hwang.code.EjinCodeCacheService.getCode("CDG131") %>
<br><br><br>
<%=egovframework.hwang.code.EjinCodeCacheService.getCode() %>
<br><br><br>
(5) 브라우저에서 출력 예
출처: https://urajilator.tistory.com/category/?page=3 ["만인은 밥 앞에 평등하다." - 우라질레이터 사마 황상규 -]
'개발자' 카테고리의 다른 글
[전자정부프레임워크] SQL 로그 Console 출력 - 우라질레이터 사마 황상규 - (0) | 2020.03.21 |
---|---|
jstree.js pulgin 출처 : 우라질레이터 (0) | 2020.03.21 |
Javascript 날짜 가져오기 및 날짜 계산 , 출처 : 우라질레이터 사마 황상규 (0) | 2020.03.21 |
Sales :: 회사설정 (0) | 2020.03.19 |
공통 js :: ent (0) | 2020.03.18 |