|
|||
|
|
Member.java - 멤버의 상태를 가지고 있다. 성별필드(Sex)는 내부 enum으로 되어 있다.
public class Member {
private String id;
private String name;
private Sex sex;
public static enum Sex {
MALE,
FEMALE
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
//나머지 get/set 메소드 생략
}
MemberDao.java - ibatis를 이용하여 데이타베이스와 연결되어 입력, 수정, 삭제, 가져오기등의 CRUD작업을 처리하는 곳이다. 내부클래스 EventTypeHandler는 IBATIS가 set/get메소드를 호출할때 enum타입을 변환시킬 수 있도록 도와준다. 실제적인 일은 상속받은 EnumTypeHandler 클래스가 한다. public class MemberDAO extends SqlMapClientDaoSupport {
public Member select(String id){
return (Member)getSqlMapClientTemplate().
queryForObject("Member.select", id);
}
public static class EventTypeHandler extends
EnumTypeHandler<Member.Sex> {
public EventTypeHandler() {
super(Member.Sex.class);
}
}
}
EnumTypeHandler.java - enum타입으로 변환을 위해 실제적인 역할을 하는 클래스이다. 라이브러리처럼 이용하면 된다. import java.sql.SQLException;
import java.sql.Types;
import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
public abstract class EnumTypeHandler<E extends Enum<E>> implements
TypeHandlerCallback {
private Class<E> enumClass;
public EnumTypeHandler(Class<E> enumClass){
this.enumClass = enumClass;
}
public Object getResult(ResultGetter getter) throws SQLException {
String result = getter.getString();
if (getter.wasNull()) {
return null;
}
return valueOf(result);
}
@SuppressWarnings("unchecked")
public void setParameter(ParameterSetter setter, Object parameter)
throws SQLException {
if (parameter == null) {
setter.setNull(Types.VARCHAR);
} else {
setter.setString(((E)parameter).name());
}
}
public Object valueOf(String s) {
return Enum.valueOf(enumClass, s);
}
}
Member.xml - 자바객체와 sql문의 매핑파일로 주목할 곳은 typeHandler 설정부분이다. javaType="kr.pe.innerman.Member$Sex" 처럼 내부클래스는 $를 사용하여 접근한다. <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Member">
<typeAlias alias="Member" type="kr.pe.innerman.Member"/>
<typeHandler javaType="kr.pe.innerman.Member$Sex"
callback="kr.pe.innerman.MemberDAO$EventTypeHandler"/>
<resultMap id="result" class="Member">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="sex" column="sex" />
</resultMap>
<select id="select" resultMap="result">
SELECT * FROM member WHERE id=#value#
</select>
</sqlMap>
|
||
최근 댓글