MyBatis

MyBatis3 resultType을 자바빈으로 지정하기

과일가게 개발자 2014. 8. 9. 08:00
반응형

myBatis 에서는 다양한 형태의 resultType을 제공한다.
특히 여러 데이터의 값들을 받아야 하는 경우 HashMap을 주로 많이 사용하는데, 필요에 따라 VO를 사용해야 할때가 있다.

그래서 myBatis에서는 resultType으로 자바빈과 같은 VO를 지정할수 있다.


VO를 사용하면 mybatis는 결과값을 vo의 setter를 이용하여 넣어주게 되고, 이용자는 getter를 통해서 해당 데이터를 사용하면 된다.



1. VO 작성

package com.test.vo;

public class TestVo {

	// ID
	int id ;
	
	// 이름
	String name ;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}


2. 쿼리 작성

	<select id="getContentsP" parameterType="hashmap" resultType="com.test.vo.TestVo">
	
		SELECT
			id, name
		FROM
			TB_Test
		WHERE
			id = #{name} and age = #{age}
	
	</select>

	<select id="getContentsPList" resultType="com.test.vo.TestVo">
	
		SELECT
			id, name
		FROM
			TB_test

	</select>


3. sql 호출 및 데이터 이용하기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.test.sqlMap.SqlSessionManager"%>
<%@page import="org.apache.ibatis.session.SqlSessionFactory"%>
<%@page import="org.apache.ibatis.session.SqlSession"%>

<%@page import="java.util.*"%>

<%@page import="com.test.vo.*"%>

<%

	SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSession();
	SqlSession sqlSession = sqlSessionFactory.openSession();
	
	try{
		
		// HashMap parameter 넘겨서 단일 행 가져오기
		HashMap pHm = new HashMap();
		pHm.put("name", "홍길동") ;
		pHm.put("age", "28") ;
		
		
		// 단일 행 가져오기
		TestVo testVo = sqlSession.selectOne("Test.getContentsP", pHm) ;
		
		// 출력하기
		System.out.println(testVo.getId()) ;
		System.out.println(testVo.getName()) ;
		
		
		
		
		
		// 복수 행 가져오기
		List<TestVo> list = sqlSession.selectList("Test.getContentsList") ;
		
		for(int i=0; i < list.size(); i++){
			TestVo testpVo = list.get(i) ;
			
			// 출력하기
			System.out.println(testpVo.getId()) ;
			System.out.println(testpVo.getName()) ;
		}
		
		
		
		
	}catch(Exception e){

		e.printStackTrace() ;
	}finally{
		sqlSession.close() ;
	}
	
	
	
%>


TIP) Vo는 resultType 뿐만 아니라 parameterType으로도 지정이 가능하다.