by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

iBatis를 이용한 DAO 개발




iBati를 이용한 DAO 개발

1. SQLMap XML 파일 작성

  • /src/main/resources/sqlmap/ 폴더에 Emp.xml 파일을 생성한다.
  • Emp.xml 파일에 아래와 같이 SELECT, INSERT 문장을 작성한다.
/src/main/resources/sqlmap/Emp.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="emp">

  	<typeAlias alias="emp" type="com.oracleclub.study.mvc.model.Emp"/>  	

 	<select id="selectEmpList" resultClass="emp"  >
		SELECT empno, ename, job, sal, NVL(mgr,0) mgr
		FROM  emp 
 	</select> 	

	<insert id="insertEmp"  parameterClass="emp"  >
 	    INSERT INTO emp (empno, ename, job, sal, mgr,  hiredate, deptno)
        VALUES (#empno#, #ename#, #job#, #sal#, 0, #hiredate#, #deptno#)
    </insert>

</sqlMap>


2. sql-map-config.xml 파일 수정

  • sql-map-config.xml 파일에 아래와 같이 Emp.xml 설정을 추가한다.
/src/main/resources/datasource/sql-map-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
	<settings
		cacheModelsEnabled="true"
		enhancementEnabled="true"
		lazyLoadingEnabled="true"		
		useStatementNamespaces="true"
	/>
	
	<sqlMap resource="sqlmap/Emp.xml"/> 
	
</sqlMapConfig> 

3. EmpDAO Class 작성

  • 사원정보의 SELECT, INSERT 작업을 담당하는 DAO Class를 작성한다.
  • SqlMapClient를 이용하여 사원정보의 DB 작업을 담당하는 DAO 클래스를 생성한다.
  • com.oracleclub.study.mvc.dao 패키지를 생성하고 EmpDAO 클래스를 생성한다.
  • SqlMapClientDaoSupport 상속하고, getSqlMapClientTemplate()을 이용하여 iBatis의 SqlMapClient API를 사용한다.
  • @Repository 을 선언하여 DAO 클래스 임을 지정한다.
com.oracleclub.study.mvc.dao.EmpDAO.java
package com.oracleclub.study.mvc.dao;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.oracleclub.study.mvc.model.Emp;

/**
 * 사원정보를 관리하는 DAO
 * 
 * @author : oramaster
 * 
 */
@Repository
public class EmpDAO extends SqlMapClientDaoSupport {

    private static final String NAMESPACE = "emp.";

    public void insertEmp(Emp emp) {
        getSqlMapClientTemplate().insert(NAMESPACE + "insertEmp", emp);
    }

    @SuppressWarnings("unchecked")
    public List<Emp> selectEmpList() {
        return getSqlMapClientTemplate().queryForList(NAMESPACE + "selectEmpList");
    }
}

4. EmpDAO Test Case 작성 및 테스트

  • src 폴더 밑에 test/java 폴더 생성
  • eclipse Java Build Path 설정에서 Source폴더를 아래와 같이 추가한다.
  • src/test/java 하위에 com.oracleclub.study.mvc.dao 패키지를 생성하고 EmpDAOTest 클래스를 생성한다.
  • 컴파일 오류가 발생하면 Junit 4 버전의 라이브러리를 추가한다.
com.oracleclub.study.mvc.dao.EmpDAOTest.java
package com.oracleclub.study.mvc.dao;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.oracleclub.study.mvc.model.Emp;

/**
 * Class 내용 기술
 * 
 * @author : oramaster
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@ContextConfiguration(locations = { "classpath:spring/applicationContext-datasource.xml" })
public class EmpDAOTest {

    @Autowired
    private SqlMapClient sqlMapClient;

    private EmpDAO empDAO;

    @Before
    public void setUp() {
        empDAO = new EmpDAO();
        empDAO.setSqlMapClient(sqlMapClient);
    }

    @Test
    public void testSelectEmpList() {
        Assert.assertTrue(empDAO.selectEmpList().size() > 0);
    }

    @Test
    public void testInsertEmp() {
        Emp emp = new Emp();
        emp.setEmpno(1298);
        emp.setEname("tester");
        emp.setSal(1200);
        emp.setDeptno(10);

        empDAO.insertEmp(emp);
    }
}

5. EmpDAO Test Case 실행

  • Alt + Shift + x 를 누르고, t 버튼을 클릭해서 테스트를 실행해 보자
  • 아래와 테스트가 정상적으로 수행이 되는지 확인해 보자

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.