카테고리 없음

Java에서 iBatis (MyBatis) 사용 시, List<LinkedHashMap<String, Object>> 특정 컬럼 존재하여 체크 로직

오아름 샘 2025. 5. 21. 13:15
반응형

값 유무가 아닌 컬럼의 존재 유무를 SELECT 절 기준으로 확인하는 것입니다.

Java에서 iBatis (MyBatis) 사용 시, List<LinkedHashMap<String, Object>>로 결과를 받았다면, 일반적으로 각 row의 key는 SQL의 SELECT 절에 포함된 컬럼명이 됩니다. 따라서 이 컬럼이 실제 쿼리 결과에 포함되었는지는 다음과 같이 첫 번째 row의 키 목록을 기준으로 확인하는 방식이 가장 일반적이고 안전합니다

 

public class ResultColumnChecker {

    /**
     * 조회 결과에서 resultFlag와 resultMessage 컬럼이 SELECT 절에 포함되어 있는지 확인합니다.
     *
     * @param resultList iBatis 조회 결과 (List<LinkedHashMap<String, Object>>)
     * @return true: 두 컬럼 모두 존재, false: 둘 중 하나라도 없음
     */
    public static boolean checkColumnsInSelect(List<LinkedHashMap<String, Object>> resultList) {
        if (resultList == null || resultList.isEmpty()) {
            return false;
        }

        // 첫 번째 row 기준으로 컬럼 존재 여부 판단
        LinkedHashMap<String, Object> firstRow = resultList.get(0);
        Set<String> columnNames = firstRow.keySet();

        return columnNames.contains("resultFlag") && columnNames.contains("resultMessage");
    }

    // 사용 예시
    public static void main(String[] args) {
        List<LinkedHashMap<String, Object>> resultList = new ArrayList<>();

        LinkedHashMap<String, Object> row = new LinkedHashMap<>();
        row.put("id", 1);
        row.put("resultFlag", null);       // 값은 null이어도 컬럼이 존재하므로 OK
        row.put("resultMessage", "");      // 빈 문자열도 OK

        resultList.add(row);

        boolean hasColumns = checkColumnsInSelect(resultList);
        System.out.println("SELECT 절에 컬럼 존재 여부: " + hasColumns);  // true 출력
    }
}

 

 

반응형