레이블이 ibatis인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ibatis인 게시물을 표시합니다. 모든 게시물 표시

2010년 2월 17일 수요일

IBatis + mysql AUTO_INCREMENT column

mysql에서 AUTO_INCREMENT로 PK를 설정하여 사용하는 경우
IBatis에서 Insert 후에 자동 생성 된 PK 값을 리턴받아 처리하는 코드 샘플이다.

--- User Table ---

create table T_USER (
user_id INT NOT NULL AUTO_INCREMENT,
login_id varchar(20) NOT NULL,
login_pwd varchar(20) NOT NULL,
user_name varchar(20),
cell_phone varchar(20),
address varchar(100),
email varchar(100),
PRIMARY KEY (user_id),
UNIQUE login_id (login_id)
);


--- UserSqlMap.xml ---



<insert id="insert" parameterClass="amf1.model.User">
insert into T_USER (login_id, login_pwd, user_name, cell_phone, address, email)
values (#loginId:VARCHAR#, #loginPwd:VARCHAR#, #userName:VARCHAR#,
#cellPhone:VARCHAR#, #address:VARCHAR#, #email:VARCHAR#)
<selectKey keyProperty="userId" resultClass="int">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>




---- UserDaoImpl.java ---



@Override
public int insertWithoutPK(User record) {
Integer userId = (Integer) getSqlMapClientTemplate().insert("T_USER.ibatorgenerated_insert",
record);

record.setUserId(userId);

return userId;
}

Eclipse + IBator : dao, model, sqpmap 파일 생성

이클립스+Spring 기반 프레임웍을 개발 중에 DB 처리를 IBatis를 이용하여 구현하기로 결정을 하고, 개발 생산성을 위해서 IBator를 이용하여, model, dao, sqlmap 파일들을 자동 생성하는 기능을 추가하기로 결정하였다.
UI를 이용하여 Ibator configuration 파일을 생성하고, 플러그인 내부에서 IBator 객체를 생성한 후 generate() 메서드를 호출하는 방식으로 구현하였다. 하지만 아래와 같은 제약사항이 있어, IBator.generate() 메서드는 dao, model 클래스를 merge 시키지 못했다. merge시키지 못했다는 의미는 파일을 생성할 때마다 이전에 dao나 model 클래스를 수정하면 수정한 내용이 사라진다는 이야기다. 매번 새롭게 파일을 생성한다.


실행시 주의사항


  1. ibator는 XML 파일이 있는 경우에 기존 파일을 merge하여 생성한다.

  2. ibator는 기본적으로 자바 파일을 merge하지 않지만 ibator eclipse plugin으로 실행하면 merge 하여 저장된다.



추측컨데 Ibator eclipse plugin은 JDT의 AST 기능으로 구현되었기 때문에 merge가 가능한 것 같다.

따라서 프레임웍에서는 Ibator.generate() 를 실행하지 않고 ibator eclipse plugin의 action을 호출하는 것으로 구현하였다.

Resources:
http://ibatis.apache.org/docs/tools/ibator/