iBATIS는 데이터베이스에 있는 자원들을 보다 쉽게 이용하기 위한 기술이다.
DB와 자바 객체간의 직접적인 동기화를 이루는 ORM(Object Relational Mapper)은 아니며, 자바 객체를 PreparedStatement 파라미터와 ResultSet으로 쉽게 매핑할 수 있도록 도와주는 간단한 기능을 제공한다.
개발자는 프로그램에서 사용될 SQL 문장들을 간단한 XML파일 형태로 작성하여 코드와 SQL문을 분리하고, 자바 객체와 XML 사이에 매핑을 걸어 이를 사용한다. 자바 코드 내에서 특정 쿼리문을 실행하기 원할 때, 파라미터와 필요한 조건을 넘기기 위한 객체를 생성하고, SQLMaps를 실행하기 위한 쿼리의 객체와 이름을 넘겨준다. 쿼리가 실행되었을 때 SQLMaps는 쿼리 결과를 받기 위해 정의된 클래스의 인스턴스를 생성하게 되는데, 이는 데이터베이스에 의해 반환된 ResultSet으로부터 만들어진다. 이것이 iBATIS의 기본적인 생각과 실행 절차이다.
<SQLMaps의 구조>
1. iBATIS를 사용하기 위한 파일구성
→ SQL Map Configuration XML 파일 - 데이터베이스 관련 설정 및 SQL Map들의 정보
→ SQL Map XML 파일 - SQL 구문
→ iBATIS 라이브러리 - iBATIS API
2. SQL Map Configuration 파일의 간단한 예(SqlMapConfig.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
<sqlMapConfig>
<!-- 프로퍼티 값을 외부로 빼내서 사용하기 위한 설정 -->
<properties resource="SqlMapConfig.properties" />
<!--
SQLMaps에서 사용되는 다양한 옵션과 최적화를 위한 설정
cacheModelsEnabled
- SqlMapClient를 위한 모든 캐시모델 설정
- default : true
enhancementEnabled
- 런타임시 바이트코드 향상 설정
- default : false
lazyLoadingEnabled
- lazy로딩 설정
- default : true
maxRequests
- 동시에 SQL문을 수행할 수 있는 쓰레드 수
- 설정값을 초과한 쓰레드는 다른 쓰레드가 종료될때까지 블록된다.
- default : 512
maxSessions
- 주어진 시간동안 활성화될 수 있는 세션 수
- default : 128
maxTransactions
- 한꺼번에 SqlMapClient.startTransaction()에 들어갈수 있는 쓰레드의 최대개수.
- 설정값을 초과한 쓰레드는 다른 쓰레드가 종료될때까지 블록된다.
- default : 32
useStatementNamespace
- 활성화된 경우 sqlmap이름과 statement이름으로 구성된 전체이름으로 매핑된 statement를 참조해야 한다.
- ex) queryForObject("sqlMapName.statementName");
- default : false
-->
<settings>
useStatementNamespaces="true"
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="512"
maxSessions="128"
maxTransactions="32"
</settings>
<transactionManager type="JDBC">
<dataSource type="DBCP">
<property name="JDBC.Driver" value="${driver}" /> <property name="JDBC.ConnectionURL" value="${url}" /> <property name="JDBC.Username" value="${username}" /> <property name="JDBC.Password" value="${password}" /> <property name="JDBC.DefaultAutoCommit" value="false" />
</dataSource>
</transactionManager>
<!-- SQLMap 설정파일 선언 -->
<sqlMap resource="../spring-config/ibatis/Member.xml" />
<sqlMap resource="../spring-config/ibatis/Join.xml" />
<sqlMap resource="../spring-config/ibatis/Board.xml" />
.
.
.
</sqlMapConfig>
|
3. SQL Map 파일의 간단한 예(Member.xml)
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
<sqlMap namespace="Member">
<!-- Member 클래스에 대한 짧은 이름 선언 -->
<typeAlias alias="member" type="com.skyunoe.model.Member"/>
<resultMap class="member" id="MemberResult">
<!-- Column 은 Real DB의 필드명 -->
<result property="seq" column="seq"/>
<result property="userid" column="user_id"/>
<result property="passwd" column="user_pwd"/>
</resultMap>
<!-- SQL문 작성 -->
<select id="getMember" parameterClass="string" resultClass="member">
<![CDATA[
SELECT seq as seq,
user_id as userid,
user_pwd as passwd
FROM tb_member
WHERE user_id = #Value#
]]>
</select>
<insert id="insertMember" parameterClass="member">
<![CDATA[
INSERT INTO tb_member(user_id, user_pwd) VALUES (#userid#, #passwd#)
]]>
</insert>
<delete id="deleteMember">
<![CDATA[
DELETE FROM tb_member WHERE seq = #Value#
]]>
</delete>
<update>
...
</update>
<statement>
...
</statement>
<procedure>
...
</procedure>
</sqlMap>
|
4. iBATIS를 사용하기 위한 자바코드 예
private static SqlMapClient sqlMapper;
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
public Member getMember(String uid) {
Member member = null;
try {
member = (Member)sqlMapper.queryForObject("getMember", uid);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return member;
}
※ 이 글은 iBATIS에 대한 기본 개념과, 사용에 대한 간단한 설명이므로, 보다 자세한 정보는 직접 찾아보기 바랍니다.
------------------------------------------------------------------------------------------------------
사족 : 대략 무슨 내용인지 감은 잡히는데 실제 적용 및 사용에는 시간이 걸릴 듯...
그리고, 프로젝트가 아파치그룹에서 구글로 옮겨가면서 이름이 myBATIS 던가로 변경되었다는 정보..
라이브러리는 다운 받았으나 새로운 버전에 대한 관련정보는 매우 적으므로 영문원서를 읽으라는 압박.
댓글
댓글 쓰기