즉 기존에 직접 jdbc connection, sql statement, parameter, result record set등을 개발자가 직접 코딩을 하던 것을 Mybatis 프레임워크가 대신 해줌
원래는 ibatis라고 불리웠는데 버전업하면서 이름을 바꾸었나보네요.. http://ibatis.apache.org/ 에 가보면 내용을 확인 할 수 있네요.
NEW NAME AND HOME
Both the Java and .NET project teams have forked the software to Google Code, where they’ll continue to maintain it and create new releases.
|
Ibatis와 크게 구조적으로 바뀌지 않은 듯합니다. 자 그럼 Mybatis를 설정하고 사용해 보도록 하겠습니다.
우선 Mybatis jar파일을 다운 받도록 해야겠죠. 해당 파일은 http://www.mybatis.org/사이트에서 다운로드 받을 수 있습니다.
mybatis-3.0.6-bundle.zip 을 다운 받으면 될 것 같습니다. 친절하게 한글 매뉴얼도 있으니 세부적인 내용을 해당 매뉴얼을 참조하시면 될듯합니다. MyBatis-3-User-Guide_ko.pdf
압축을 풀면 다음과 같은 파일이 있습니다. 이중 mybatis-3.0.6.jar파일을 project의 libaray에 복사하여 놓으면 우선 기본적인 준비는 다 된것이겠죠 ? ^^;

복사하실 대는 Navigator view에서 복사해 놓으시면 됩니다.

우선 ibatis와 비슷하게 SqlMapper로 Mybatis에서는 SqlSessionFactory 인스턴트를 사용한다고 합니다. SqlSessionFactory 인스턴트를 생성하기 위해서는 SqlSessionFactoryBuilder를 통해 생성할 수 있다고 합니다. ;;;
쉽게 말해서 SqlSessionFactoryBuilder를 통해 jdbc설정등을 한 SqlMapper인 SqlSessionFactory인스턴트를 얻어오는 작업이라고 보면 됩니다.
해당 코드는 다음과 같습니다. 나중에 전체적인 소스를 보면 쉽게 이해할 수 있을 것입니다. 우선 고고싱~~
String resource = "org/power/mabatis/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
|
위에서 Configuration.xml파일에는 jdbc설정정보가 들어 있습니다. 내용을 보면 아래와 같습니다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="org/power/mybatis/db.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/power/mapper/bbsMapper.xml" />
</mappers>
</configuration>
|
db.properties파일에는 jdbc설정 정보가 들어 있습니다. 내용을 보면 아래와 같습니다.
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=scott
password=tiger
|
properties파일을 굳이 분리하지 않고 해당 string에 직접 입력해도 동일한 결과가 나오겠죠;;^^
위의 Configuration.xml 을 읽어 SqlSessionFactoryBuilder를 통해 SqlMapper인 SqlSessionFactory 인스턴트를 생성한다는 말이네요.. 자 그럼 sqlMapper는 준비가 되었습니다. 이제 이것을 사용해 볼까요?
String resource = "org/power/mybatis/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlMapper.openSession();
try {
bbsvo = (BbsVO) session.selectOne("selectBbs", 5000);
System.out.println(bbsvo.toString());
} finally {
session.close();
}
|
사용 방법도 간단합니다. SqlSessionFactory에서 SqlSesson을 얻어 온 후에 sql을 mapping한 xml을 통해 자료를 읽어오면 됩니다. 이건 뭔말인지 ㅎㅎ; 자 그럼 자세히 보도록 하겠습니다.
bbsvo = (BbsVO) session.selectOne("selectBbs", 5000);
이 문장인데요. 위 문장은 BbsVO라는 vo object를 반환합니다. selectOne메소드는 하나의 인스턴트를 반환합니다. selectOne("selectBbs", 5000)에서 selectBbs는 xml에 있는 sql mapping id입니다. 5000은 인자값입니다.
이것으로 이해가 좀;; 그렇죠 ^^. 자 그럼 sqlmapping xml파일(bbsMapper.xml)을 보시면 이해가 되실 겁니다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="bbs">
<!-- select 쿼리문 정의 -->
<select id="selectBbs" parameterType="int" resultType="org.power.vo.BbsVO">
SELECT * FROM TBL_BBS
WHERE bbsno = #{bbsno}
</select>
</mapper>
|
Configuration.xml 파일 보시면 다음의 매핑 정보가 있죠?
<mappers>
<mapper resource="org/power/mapper/bbsMapper.xml" />
</mappers>
|
selectOne메소드는 id="selectBbs"를 찾아 해당 sql문을 수행하고 결과를 리턴합니다. 즉 아래의 xml안의 select문을 찾겠죠. 여기에는 파라메터 타입이 int로 받으며 결과는 BbsVO라는 vo Object로 결과를 반환하겠다는 설정이 있습니다.
파라메터는 int로 받는다고 했고 SQL문에는 인자값으로 #{bbsno}를 받는다고 설정되어 있습니다. 즉 selectOne("selectBbs", 5000)에서 5000값이 bbsno에 설정되겠죠?
<select id="selectBbs" parameterType="int" resultType="org.power.vo.BbsVO">
SELECT * FROM TBL_BBS
WHERE bbsno = #{bbsno}
</select>
|
자 그럼 대충 mybatis가 작동하는 원리가 이해가 되시나요 ^^;

정리하면 위의 그림에서 SqlMapConfig.xml이 우리가 살펴본 Configuration.xml이고 SqlMap.xml이 bbsMapper.xml 이 되겠죠. 환경설정 및 SQL Mapping xml을 통해 Mybatis 프레임워크는 자동으로 SQL input파라메터와 result를 자동으로 object에 매핑하여 줍니다. 즉 Mabatis를 사용하므로써 다음의 소스코드들을 개발자가 직접작성하는 불필요한 작업이 없어지게 됩니다.
public void insert(final BbsVO vo) throws Exception {
final StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO TBL_BBS ");
sql.append(" (bbsno, title, content, writer, hits) ");
sql.append(" VALUES (?, ?, ?, ?, ?)");
new AbstractDAO() {
@Override
public void query() throws Exception {
pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, vo.getBbsno());
pstmt.setString(2, vo.getTitle());
pstmt.setString(3, vo.getContent());
pstmt.setString(4, vo.getWriter());
pstmt.setInt(5, vo.getHits());
pstmt.executeQuery();
}
}.execute();
}
|
Java 1.5버전부터 annotation이 나왔나요? 위 그림을 보면 Mabatis가 Mapper Annotation을 지원하고 있는 것을 볼 수 있습니다. 이를 사용하면 개발이 더 단순하게 될 것입니다.
JUNIT으로 테스트하는 소스코드와 결과를 한번 보고 글을 마치겠습니다.
package org.power.test;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.power.vo.BbsVO;
import junit.framework.TestCase;
public class BbsMybatisTest extends TestCase {
String resource;
Reader reader;
BbsVO bbsvo;
protected void setUp() throws Exception {
super.setUp();
resource = "org/power/mybatis/Configuration.xml";
}
public void testBbsMybatis() {
try {
reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlMapper.openSession();
try {
bbsvo = (BbsVO) session.selectOne("selectBbs", 5000);
System.out.println(bbsvo.toString());
} finally {
session.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
|
자세한 설명은 http://www.mybatis.org/사이트에 한글 매뉴얼이 잘 되어 있으니 참고 하시면 될 것 같습니다.
[출처] Mybatis를 알아보자|작성자 파랑물고기
댓글 없음:
댓글 쓰기