본문 바로가기
반응형

 

 

 

### 파일수정 ###

파일명 : mybatis-config.xml

아래 사항을 추가합니다.

<setting name="mapUnderscoreToCamelCase" value="true"/> 

데이터베이스 칼럼명 형태인 A_COLUMN을 CamelCase 형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 (default false)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "HTTP://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

	<settings>
		<setting name="cacheEnabled" value="false" /> <!-- 설정에서 각 매퍼에 설정된 캐시를 전역적으로 사용할지 말지에 대한 여부 (default true)-->
		<!-- <setting name="lazyLoadingEnabled" value="true" /> --> <!-- 지연로딩을 사용할지에 대한 여부. 사용하지 않는다면 모두 즉시 로딩 (default true) -->
		<!-- <setting name="multipleResultSetsEnabled" value="true" /> --> <!-- 한개의 구문에서 여러개의 ResultSet을 허용할지의 여부 (default true) -->
		<setting name="defaultExecutorType" value="SIMPLE" /> <!-- 디폴트 실행자(executor) 설정. PreparedStatement를 재사용 하고 수정을 배치 처리 (default SIMPLE)-->
		<setting name="defaultStatementTimeout" value="600" /> <!-- 데이터베이스로의 응답을 얼마나 오래 기다릴지를 판단하는 타임아웃(초)를 설정 -->
		<setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 데이터베이스 칼럼명 형태인 A_COLUMN을 CamelCase 형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 (default false) -->
		<setting name="logImpl" value="NO_LOGGING" /> <!-- 마이바티스가 사용할 로깅 구현체를 명시. 이 설정을 사용하지 않으면 마이바티스가 사용할 로깅 구현체를 자동으로 찾는다. -->
		<setting name="jdbcTypeForNull" value="NULL"/> <!-- JDBC 타입을 파라미터에 제공하지 않을 때 null 값을 처리한 JDBC 타입을 명시 -->
		<setting name="callSettersOnNulls" value="true"/> <!-- 가져온 값이 null일때 setter나 맵의 put 메소드를 호출할지를 명시 (default false) -->
	</settings>

	<typeAliases>		
		<typeAlias alias="hsMap" type="com.mall.batch.biz.persistence.domain.shop.HsMap" />		
	</typeAliases>

</configuration>

 

위 hsMap의 클래스 입니다. 물론 위치도 맞춰주셔야합니다.!!

package mallAdmin.framework.dataaccess.util;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.LinkedHashMap;


public class HsMap  extends LinkedHashMap {

	/**
	 * DB에서 resultSet을 구성시 AA_BB_CC등의 컬럼명을 카멜 표기법(aaBbCc)에 맞게 변환한다.
	 */
	@Override
	public Object put(Object key, Object value) {
		return super.put(DataUtil.convert2CamelCase((String) key), value);
	}

	public String getString(Object key) {
		Object obj = super.get(key);
		return obj == null ? "" : obj.toString();
	}

	public int getInt(Object key) {
		Object obj = super.get(key);
		if (obj == null) {
			return 0;
		} else {
			Class<? extends Object> classType = obj.getClass();
			if (classType != Integer.class && classType != BigInteger.class) {
				if (classType == Short.class) {
					return (Short) obj;
				} else {
					if (classType == String.class || classType == BigDecimal.class) {
						try {
							return Integer.parseInt(obj.toString());
						} catch (NumberFormatException var5) {
							System.out.println("GagaMap key(" + key + ")"
									+ "'s type(int) does not match : It's type is not double.");
						}
					}

					System.out.println("GagaMap value's type(int) does not match : It's type is not int.");
					return 0;
				}
			} else {
				return (Integer) obj;
			}
		}
	}


}

 

DateUtil.java

위 hsmap을 이용하기 위한 클래스를 추가합니다.

package com.wivismall.batch.biz.persistence.domain.shop;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class DataUtil {
	
	/**
	 * underscore ('_') 가 포함되어 있는 문자열을 Camel Case ( 낙타등
	 * 표기법 - 단어의 변경시에 대문자로 시작하는 형태. 시작은 소문자) 로 변환해주는
	 * utility 메서드 ('_' 가 나타나지 않고 첫문자가 대문자인 경우도 변환 처리
	 * 함.)
	 * @param underScore
	 *        - '_' 가 포함된 변수명
	 * @return Camel 표기법 변수명
	 */
	public static String convert2CamelCase(String underScore) {

		// '_' 가 나타나지 않으면 이미 camel case 로 가정함.
		// 단 첫째문자가 대문자이면 camel case 변환 (전체를 소문자로) 처리가
		// 필요하다고 가정함. --> 아래 로직을 수행하면 바뀜
		if (underScore.indexOf('_') < 0 && Character.isLowerCase(underScore.charAt(0))) {
			return underScore;
		}
		StringBuilder result = new StringBuilder();
		boolean nextUpper = false;
		int len = underScore.length();

		for (int i = 0; i < len; i++) {
			char currentChar = underScore.charAt(i);
			if (currentChar == '_') {
				nextUpper = true;
			} else {
				if (nextUpper) {
					result.append(Character.toUpperCase(currentChar));
					nextUpper = false;
				} else {
					result.append(Character.toLowerCase(currentChar));
				}
			}
		}
		return result.toString();
	}
	
	public static HsMap convertMap2HsMap(Map map) {
		
		HsMap hsMap = new HsMap();
		
		Set<String> keySet = map.keySet();
		Iterator<String> iterator = keySet.iterator();
		
		while (iterator.hasNext()) {
			String key = iterator.next();
			Object value = map.get(key);
			hsMap.put(key, value);
		}
		
		return hsMap;
	}

}

 

 

조회시 resultType="hsMap" 으로 수정.

    <!-- 조회 -->
    <select id="getRefindAddrTgtList" parameterType="hsMap" resultType="hsMap">
    <![CDATA[
        /* WbaLogen.getRefindAddrTgtList */
        SELECT OD.SHPMALL_SITE_CD
             , OD.DELV_ADDR_SQ
             , DA.RECIP_BASE_ADDR
             , DA.RECIP_DTL_ADDR
             , REGEXP_REPLACE(REGEXP_REPLACE(FN_GET_ADDRESS(DA.RECIP_BASE_ADDR || ' ' || DA.RECIP_DTL_ADDR, 'BASE'),   '[_ㅡ&]', ' '),' +',' ') AS BASE_ADDR
             , REGEXP_REPLACE(REGEXP_REPLACE(FN_GET_ADDRESS(DA.RECIP_BASE_ADDR || ' ' || DA.RECIP_DTL_ADDR, 'DETAIL'), '[_ㅡ&]', ' '),' +',' ') AS DTL_ADDR
             , REGEXP_REPLACE(REGEXP_REPLACE(FN_GET_ADDRESS(DA.RECIP_BASE_ADDR || ' ' || DA.RECIP_DTL_ADDR, 'BASE') || ' ' || FN_GET_ADDRESS(DA.RECIP_BASE_ADDR || ' ' || DA.RECIP_DTL_ADDR, 'DETAIL'), '[_ㅡ&]', ' '),' +',' ') AS STR_ADDR
             , PKG_CRYPTO.FN_DECRYPT(DA.RECIP_PHNNO) AS RECIP_PHNNO
             , PKG_CRYPTO.FN_DECRYPT(DA.RECIP_TELNO) AS RECIP_TELNO
             , DA.RECIP_VIR_PHNNO
             , DA.RECIP_VIR_TELNO
          FROM TB_ORDER_DETAIL  OD
             , TB_ORDER         O
             , TB_DELIVERY_ADDR DA
             , TB_POST_LOGEN    PL
         WHERE 1=1
           AND OD.SHPMALL_SITE_CD = O.SHPMALL_SITE_CD
           AND OD.ORD_NO          = O.ORD_NO
           AND OD.SHPMALL_SITE_CD = DA.SHPMALL_SITE_CD
           AND OD.DELV_ADDR_SQ    = DA.DELV_ADDR_SQ
           AND DA.SHPMALL_SITE_CD = PL.SHPMALL_SITE_CD(+)
           AND DA.DELV_ADDR_SQ    = PL.DELV_ADDR_SQ(+)
           AND O.ORD_DT           BETWEEN SYSDATE-10 AND TRUNC(SYSDATE)+0.99999
           AND OD.SHPMALL_SITE_CD = #{shpmallSiteCd}
           AND NOT EXISTS (
                SELECT *
                  FROM TB_POST_LOGEN PL
                 WHERE PL.SHPMALL_SITE_CD = OD.SHPMALL_SITE_CD
                   AND PL.DELV_ADDR_SQ    = OD.DELV_ADDR_SQ 
           )                     
                 
    ]]>
    </select>

 

 

DAO.java 에서는 아래와 같이 HsMap으로 받아줍니다.

Collection<HsMap> getRefindAddrTgtList(Map delv);

 

 

 

끝~

 

 

 

반응형

'Framework > Mybatis' 카테고리의 다른 글

[Mybatis] 파라미터 foreach + split 처리하기.  (0) 2024.04.30