Programming/JPA ⁄Spring

MyBatis ) VO(Value Object)객체 만들지 않고 map 으로 쿼리 결과 받아오기

Shane_Park 2021. 6. 11. 12:42
반응형

MyBatis ) VO(Value Object)객체 만들지 않고 map 으로 쿼리 결과 받아오기


VO 객체를 만들어 두고 MyBatis 에서 맵핑을 해서 쓴다면 정말 간편하고 쉬운데요,

property 가 적고, 자주 사용하지 않는 객체들도 모두 VO 로 등록하기엔 비 효율적입니다.

 

마침 팀원분 한 분이 Map 에 맵핑 하는걸 궁금해 하시기도 해서 이번 기회에 Map으로 한번 코드를 작성 해 보았습니다.

 

package best.gaia.project.dao;


import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;


@Repository
public interface RepositoryDao {
	
	public List<Map<String, Object>> selectRepositoryList(int proj_no);
	
}

repository  dao 파일 입니다. 선언만 해주고 마이바티스에서 proxy 구현체 ( daoimpl 의 역할) 을 생성해줍니다.

 

<?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="best.gaia.project.dao.RepositoryDao">
	<select id="selectRepositoryList" parameterType="int" resultType="java.util.HashMap">
		SELECT *
		FROM REPOSITORY
	</select>
	
</mapper>

마이바티스 설정 파일인데요, 써놓고 보니 너무 쉬워서 vo 사용을 줄여야 겠다는 생각이 들었습니다.

 

package best.gaia.project.dao;

import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import best.gaia.TestWebAppConfiguration;

@RunWith(SpringJUnit4ClassRunner.class)
@TestWebAppConfiguration
public class RepositoryDaoTest {
	
	@Inject 
	RepositoryDao dao;

	@Test
	public void testSelectRepositoryList() {
		
		List<Map<String, Object>> repositories = dao.selectRepositoryList(1);
		
		int i = 1;
		for(Map<String, Object> repository : repositories ) {
			System.out.println(i++ + "번째 저장소");
			System.out.println(repository);
		}
		
		
	}

}

바로 테스트 코드를 작성해서 테스트 해 보았습니다.

 

허무 할 정도로 너무 쉽게 map 을 만들어 줍니다.

꺼내 쓸때 code assist를 받으며 getter 호출을 하는 게 아니기 때문에 조금 더 신경 써야 할 수도 있는데,

단순하게 바로 JSON 형태로 마샬링 해서 보내주는 경우를 생각하면 너무 편합니다.

반응형