[Spring] Mybatis에서 Data 가져올 때 VO 와 Map 의 차이점
Spring 개발 및 DB의 데이터를 불러와야 하는 경우 Mybatis에서 data를 가져올 때 어떤 형식으로 가져와야 할까?
당연히 VO? 많이 사용하기 때문에?
Map? "map" 만 적으면 column명, data가 자동으로 쉽게 가져와져서?
VO Class
VO class에서는 필드변수를 private로 지정해 getter/setter 함수를 이용해 main, service 등에서 사용할 수 있다.
다음과 같은 방법으로 VO class를 사용해 DB의 컬럼(column)과 값을 정의할 수 있다.
class UserVO{
private String name
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
Map
Map을 이용하면 VO class에서 필드변수를 지정하고 set함수를 통해 변수 값을 지정해준 것과 같이
key, value 값을 이용해 정의할 수 있다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UseMap{
public static void main(String[] args) {
// VO 사용해 List를 만들어보자!
List<UserVO> listVO = new ArrayList<UserVO>();
UserVO vo1 = new UserVO();
vo1.setName("알파카");
listVO.add(vo1);
system.out.println(listVO.get(0).getName());
// 알파카 출력!
// Map을 사용해 VO와 동일하게 List를 만들어보자!
List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
Map<String,Object> map1 = new HashMap<String,Object>();
map1.put("name","알파카");
listMap.add(map1)
system.out.println(listMap.get(0));
// name = 알파카 출력!
// HashMap 같은 경우 data가 바로 출력해도 Json 형식으로 출력된다!
}
}
위와 같이 Map을 이용해 VO와 동일한 결과를 가져올 수 있다.
Json 형식으로 바로 출력이 가능하다는 장점도!
장 단 점
VO 와 Map 둘 모두 장단점이 존재한다.
VO
필드변수를 하나하나 지정해주어야한다. 그만큼 변수, JOIN이 많아지거나 컬럼이 많아질 수록 코딩시간이 길어진다.
하지만 컬럼 및 리턴타입(return type)을 파악하기 좋은 장점이 있다! (유지보수에 유리!)
Map
Mybatis에서 자동으로 Mapping이 되기 때문에 쿼리(Query)만 잘 작성하면 쉽게 DB를 받아올 수 있다.
하지만 리턴타입이나 데이터 구조를 확인하는데에 있어 한번 출력을 해봐야 알 수있어 파악이 어려운 단점이 있다.
회사마다 다른 방법을 사용하고 있고, 어떤 방법을 사용해 Mybatis에서 DB를 불러오고 Mapping 하느냐에 따라 장단점이 존재하기 때문에 모두 알아두고 한 번씩 사용해 보는 것이 좋다!