본문 바로가기

Java

iBatis에서 테이블 생성하기 - 당근 퍼왔죠!!

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에 직접 값을 삽입하는 방법

http://gt1000.egloos.com/745601 여기서 퍼왔습니다.

'Java' 카테고리의 다른 글

파일업로드 실습  (0) 2009.11.28
iBatis 에서 테이블 생성  (0) 2009.11.17
자바 정규 표현식  (0) 2009.11.13
자바의 Exception  (0) 2009.11.06
Iterator Test  (0) 2009.10.27