이글루스 | 로그인  



iBatis Table 생성 예제

iBatis 홈 페이지에서 찾다가... 못 찾아서...
문서 읽어 보면서 찾은게 있는데...
iBatis in Action 책 100 페이지에 나오는 $ 대입자로 인라인 파라미터 사용하기 입니다.
SQL 주입 공격을 받을수 있는 여지가 있고, 남용하면 성능상의 문제가 있을수 있으므로 주의해서 사용 하랍니다.
테스트는 성공 했는데 맞는지는 잘 모르겠습니다.
회사에서 보안과 메일 한글 깨지는 문제가 있어서 부득이 블로그에 남깁니다.
혹시 버거가 발생 하시면 알려 주시기 바랍니다.
저의 개발 환경은 struts2,spring2,ibatis, jdk6, tomcat5.5, eclipse3.2 입니다.
Junit 태스트한 것을 올려 보겠습니다.

우선 만들고자 하는 테이블은 

CREATE TABLE CHEON_IBATIS_TEST (
 USER_ID       NUMBER(10)  NOT NULL,
 EMAIL       VARCHAR2(256) NOT NULL,
 CONSTRAINT CHEON_IBATIS_TEST_PK PRIMARY KEY(USER_ID)


입니다.

Junit 파일에 테스트 하고자 하는 메소드를 작성 합니다.
public class UserDaoTest extends AbstractTransactionalDataSourceSpringContextTests{

 private UserDao userDao ;

 public UserDao getUserDao() {
  return userDao;
 }

 public void setUserDao(UserDao userDao) {
  this.userDao = userDao;
 }

 protected String[] getConfigLocations() {
        setAutowireMode(AUTOWIRE_BY_NAME);
        return new String[] {"classpath*:spring-config.xml"};
    }

    protected void onSetUpInTransaction() throws Exception {
//        deleteFromTables(new String[] {"account", "account_family"});
    }

    @Override
    protected void onSetUp() throws Exception {
     // TODO Auto-generated method stub
     super.onSetUp();
    }

// 여기가 테이블 생성 테스트 메소드 입니다.
// MemberBean은 입력 패러미터를 전달하기 위해 사용 하였습니다.
// email 이라는 변수에 생성할 테이블 이름을 저장해 봤습니다.
public void testCreateTable() throws Exception {
     MemberBean memberBean = new MemberBean();
     memberBean.setUserId(new Long(1000));
     memberBean.setEmail("CHEON_IBATIS_TEST ");

    // 이 부분을 호출 하면 테이블이 생성 됩니다.
     userDao.createTable(memberBean);
    // 이건 트랜잭션 처리를 해서 실제 DB에 생성 되게 해 주는 Spring 이 제공하는 메소드
     setComplete();
}  
}

Data를 주고 받는 Bean
public final class MemberBean implements Serializable {

    public MemberBean() {

    }
    private Number userId;
    private String email;

    public Number getUserId() {
        return userId;
    }

    public void setUserId(Number userId) {
        this.userId = userId;
    }
    public String getEmail() {
        return email;
    }

    public String getFirstName() {
        return firstName;
    }
}

실제 iBatis를 사용하는 Dao Class 소스 입니다.
queryForObject("User.createTable", null);에서 첫번째 parameter는 iBatis xml 파일에서
<statement id ="User.createTable">에 사용하며, create 문의 경우 parameter가 필요 없기 때문에 null 입니다.

public class UserDao extends SqlMapClientTemplate {

 public void createTable(MemberBean memberBean) throws Exception {
  queryForObject("User.createTable", memberBean);
 }
 }

iBatis xml 파일 전부 생략 하고...
<sqlMap namespace="User">
<statement id="createTable" parameterClass="MemberBean">
  CREATE TABLE $email$ (
   USER_ID       NUMBER(10)  NOT NULL,
   EMAIL       VARCHAR2(256) NOT NULL
  )
 </statement>

$생성할 테이블 이름$
이게 핵심인거 같습니다. $변수$ 로 sql에 직접 값을 삽입하는 방법

이렇게 했을 경우 DB에 Table이 생성 되는 것을 확인 했습니다.
테이블 생성 후 insert를 하고 싶으면 지금 Dao 메소드를 확장해서 insert 하시는 메소드를 하나 추가 하시면 됩니다.
iBatis in action 책에서는 가능하면 ddl 문은 사용하지 않는것이 좋다고 합니다.
시간이 부족한 관계로 설명이 부족할 줄로 압니다.
답글 남겨 주시면.... 부족한 부분은 수정해 드리겠습니다.

by 나림 | 2007/09/13 10:56 | ibatis | 트랙백 | 핑백(1) | 덧글(0)

트랙백 주소 : http://gt1000.egloos.com/tb/745601
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at 노르웨이숲님의 이글루 : iB.. at 2008/02/26 12:17

... 출처 : http://gt1000.egloos.com/745601iBatis 홈 페이지에서 찾다가... 못 찾아서...문서 읽어 보면서 찾은게 있는데...iBatis in Action 책 100 페이지에 나오는 $ 대 ... more

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶