728x90
반응형

 

<insert id="test">
  insert into dto(
   id,pass)
  values(
   #id:VARCHAR#,
   #pass:VARCHAR#
  )
 </insert>

 

 

 <insert id="test2" parameterMap="mapTest">
  insert into dto(
   id,pass)
  values(
   ?,?  
  )
 </insert>

 

 

둘중에 어느 것이  이해하기 쉬운가?

 

둘다 처음볼수있겠지만...딱보기에도

 

아래것이 훨씬 직관적이다

 

 

왜냐하면 ?,?에 내가 넣을 insert값이 들어간다는것은 JDBC 프로그래밍을 한번이라도 해봤으면

 

 

알고있을것이다

 

 

사실 인라인 파라미터 매핑은 장점도있다

 

왜냐하면 실제 DB를 보지않고도 XML에서

 

VARCHAR형인지 INT형인지 DATA TYPE을 바로알수있기 때문이다.

 

또한 사용할때 이상한

 

 <parameterMap class="ibatis.test.Dto" id="mapTest">
  <parameter property="id" jdbcType="VARCHAR"/>
  <parameter property="pass" jdbcType="VARCHAR"/>
 </parameterMap>

 

이것과 같이 이런것을 선언하지 않고도 사용할수있다.

 

 

 

하지만 중요한건 중복이 심하다는 것이다.          

 

 

왜냐하면 바로위에 나왔던 id,pass 가 바로아래에 또나온다.

 

반면에 파라미터 맵은

 

 <parameterMap class="ibatis.test.Dto" id="mapTest">
  <parameter property="id" jdbcType="VARCHAR"/>
  <parameter property="pass" jdbcType="VARCHAR"/>
 </parameterMap>

 

위와같이 특정 DTO 클래스를 이미 지정해주고 ID값을 넣어줘야한다.

 

ibatis.test.Dto은 패키지와 클래스명이다.

 

그러고 사용할때는 parameterMap= 아까지정한 id

 

라고 정의만해주면 ?,?를 마음껏사용할수있다.

 

 <insert id="test2" parameterMap="mapTest">
  insert into dto(
   id,pass)
  values(
   ?,?  
  )
 </insert>

 

 

그리고 실제 호출할때는

 

메인 메소드 또는 단위 테스트에서

 

  Dto dto = new Dto();
  dto.setId("test2");
  dto.setPass("pass2");
  SqlMapLocator.getMapper().insert("test2",dto);  

 

//첫번째 parameter는 내가 xml에서 정의한 매핑 을 부를때 쓰는 매핑id값이고 두번째는 insert이므로 넘겨줄 객체이다.

해주면된다.

 

 

-----------------------참고. db connect관련 xml 파일인 SqlMapConfig.xml을 호출하는 static 메소드를 가진 클래스

 

package com.util;

import java.io.IOException;
import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class SqlMapLocator {
    public static SqlMapClient getMapper(){
        SqlMapClient sqlMapper = null;
        try {
            Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
            sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
        } catch (IOException e) {
            //fail시 발생
            e.printStackTrace();
        }
       
       
        return sqlMapper;
    }

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,