1. iBATIS¶õ ¹«¾ùÀΰ¡?
1.1. SQL ¸ÅÇÎÇϱâ
¾Æ·¡´Â °£´ÜÇÑ XML ¼¼ú ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© SQL ±¸¹®ÀÇ ÀԷ°ú Ãâ·ÂÀ» ¸ÅÇÎÇÏ´Â ¿¹ÀÌ´Ù.
¿©±â¼ ÁÖ¼Ò µ¥ÀÌÅ͸¦ ¹ÝȯÇÏ´Â SQL SELECT ±¸¹®À» º¼ ¼ö ÀÖ´Ù.
parameterClass="java.lang.Integer"
resultClass="Employee">
SELECT ID as id,
EMPLOYEE_NUMBER as employeeNumber,
FIRST_NAME as firstName,
LAST_NAME as lastName,
TITLE as title
FROM EMPLOYEE
WHERE EMPLOYEE_NUMBER = #empNum#
ÀÌ Äõ¸®¹®À» ½ÇÇàÇÏ´Â ¹æ¹ýÀº ÀÚ¹ÙÄڵ忡¼ ´ÙÀ½À» ½ÇÇàÇÏ´Â °ÍÀÌ´Ù.
Employee emp = (Employee) sqlMap.queryForObject("getEmployee",
new Integer(5));
ÀÌ ÄÚµå´Â ±¸¹®À» ½ÇÇàÇÏ°í ÆĶó¹ÌÅ͸¦ ¼ÂÆÃÇÏ¸ç ½ÇÁ¦ ÀÚ¹Ù °´Ã¼·Î °á°ú¸¦ °¡Á®¿Â´Ù.
2.2.1ÀÛ°í °£´ÜÇÑ ½Ã½ºÅÛÀ» À§ÇÑ iBATIS
iBATIS °¡ ¼Ò±Ô¸ð ¾îÇø®ÄÉÀ̼ǰúµµ Àß ÀÛµ¿ÇÏ´Â ÀÌÀ¯´Â
ù°, iBATIS ÀÚü°¡ ÀÛ°í °£´ÜÇÏ´Ù.
µÑ°, iBATIS ´Â ÀÌ¹Ì Á¸ÀçÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ̳ª µ¥ÀÌÅͺ£À̽ºÀÇ ¼³°è º¯°æÀ» °¿äÇÏÁö ¾Ê´Â´Ù.
¼Â°, ÇöÀç ¿À·£ ±â°£ ¿î¿µÁßÀÎ ¼ÒÇÁÆ®¿þ¾î¶ó¸é, Àڱ׸¶ÇÑ ±Ô¸ðÀÇ ¼ÒÇÁÆ®¿þ¾î°¡ Å« ±Ô¸ðÀÇ ¼ÒÇÁÆ®¿þ¾î·Î ¼ºÀåÇÏ´Â °ÍÀº ÇÇÇÒ ¼ö ¾ø´Â »ç½ÇÀÌ´Ù. iBATIS°¡ ´ë±Ô¸ð ½Ã½ºÅÛ¿¡¼µµÀß ÀÛµ¿Çϱ⠶§¹®¿¡ iBATIS¸¦ »ç¿ëÇÏ´Â ¼Ò±Ô¸ð ¾îÇø®ÄÉÀ̼ÇÀÌ Àü»çÀû ¾ÖŬ¸®ÄÉÀ̼ÇÀǿ䱸 Á¶°ÇÀ» ¸¸Á·½ÃÅ°´Â ½Ã½ºÅÛÀ¸·Î ¼ºÀåÇØ°¡´Â µ¥µµ ¹®Á¦°¡ ¾ø´Ù.
1.3. ¿Ö iBATIS¸¦ »ç¿ëÇϳª?
2.3.1°£´ÜÇÔ
iBATISÀÇ ¸Å¿ì °ß°íÇÑ Åä´ë°¡ µÇ´Â JDBC¿Í SQLÀ» °è¼Ó À¯ÁöÇÔÀ¸·Î½á ÀÌ·¯ÇÑ °£°á¼ºÀ» È®º¸ÇÏ°Ô µÇ¾ú´Ù. iBATIS´Â ÈξÀ ´õ ÀûÀº ÄÚµå·Îµµ JDBCó·³ ÀÛµ¿Çϱ⠶§¹®¿¡ ÀÚ¹Ù °³¹ßÀÚµéÀÌ ´Ù·ç±â°¡ ½±´Ù.
2.3.2»ý»ê¼º
iBATIS´Â °³¹ßÀÚÀÇ »ý»ê¼ºÀ» ³ô¿©ÁÖ´Â µ¥ ¼º°øÇß´Ù. Äڵ差ÀÇ °¨¼Ò´Â ÁÖ¼Ò ÀÛ¼ºÇÒ ÇÊ¿ä°¡ ¾ø´Â JDBC ÄÚµå ¶§¹®ÀÌ´Ù. SQLÀº ¿©ÀüÈ÷ ¼ÕÀ¸·Î ÀÛ¼ºÇØ¾ß ÇÏÁö¸¸, SQLÀº ¹®Á¦°¡ µÇÁö¾Ê´Â´Ù.
2.3.3¼º´É
iBATIS´Â ³ªÁß¿¡ ÀÚ¼¼È÷ ¾ð±ÞÇÒ ¸¹Àº ¼º´É ÃÖÀûÈ ±â¹ýÀ» Áö¿øÇÑ´Ù. Áö±ÝÀº iBATIS¸¦ °£´ÜÇÑ ¹æ¹ýÀ¸·Î ¼³Á¤Çؼ »ç¿ëÇÒ ¼ö ÀÖ°í, ³ª¾Æ°¡ JDBC¸¸Å Àß, ȤÀº ´õ ¶Ù¾î³ª°Ô ¼öÇàµÈ´Ù´Â °ÍÀ» ¾Æ´Â °ÍÀÌ Áß¿äÇÏ´Ù.
2.3.4°ü½É»çÀÇ ºÐ¸®
iBATIS´Â µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç°ú PreparedStatement ±×¸®°í °á°ú¼Â °°Àº Æ۽ýºÅϽº °èÃþ°ú °ü·ÃµÈ ¸®¼Ò½º¸¦ °ü¸®ÇÏ¿© °èÃþȸ¦ Áö¿øÇϵµ·Ï µµ¿ÍÁØ´Ù. iBATIS´Â µ¥ÀÌÅͺ£À̽º¿¡ µ¶¸³ÀûÀÎ ÀÎÅÍÆäÀ̽º¿Í API¸¦ Á¦°øÇÏ¿© ¾ÖÇø®ÄÉÀ̼ÇÀ» ¾î¶°ÇÑ Æ۽ýºÅϽº °èÃþ °ü·Ã ¸®¼Ò½º¿¡µµ ÀÇÁ¸ÇÏÁö ¾Ê°Ô ÇØÁØ´Ù.
2.3.5 ÀÛ¾÷ÀÇ ºÐ¹è
SQL¹®ÀÌ ¾ÖÇø®ÄÉÀÌ¼Ç ¼Ò½º ÄÚµå·ÎºÎÅÍ ¿ÏÀüÈ÷ ºÐ¸®µÇ±â ¶§¹®¿¡, SQL ÇÁ·Î±×·¡¸Ó´Â ¹®ÀÚ¿ ÀÌ¾î ºÙÀ̱⿡ ´ëÇØ °ÆÁ¤ÇÒ ÇÊ¿ä¾øÀÌ SQLÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
2.3.6 À̽ļº: ÀÚ¹Ù, .NET ±×¸®°í ±× ¿Ü¡¦
À̽ļºÀÌ ³ô´Ù´Â °ÍÀº ¸ðµç ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ¼³°è¸¦ ÀÏ°ü¼º ÀÖ°Ô ÇÒ ¼ö ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. iBATIS´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼³°è¿Í ¹«°üÇÏ°Ô ´õ ¸¹Àº ¾ð¾î¿Í ´Ù¸¥ ÇÁ·¹ÀÓ¿öÅ©º¸´Ù ´õ¸¹Àº ÇüÅÂÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ÀÛµ¿ÇÑ´Ù.
2.3.7 ¿ÀÇ ¼Ò½º¿Í Á¤Á÷¼º
¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾îÀÇ °¡Àå Å« ÀåÁ¡ Áß Çϳª´Â Á¤Á÷ÇÏ´Ù´Â Á¡ÀÌ´Ù. Áø½ÇÀ̳ª °ÅÁþÀ»°úÀåÇÒ ±î´ßÀÌ ¾ø´Ù. ±×·¡¼ iBATIS¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Â °æ¿ì¿¡ ´ëÇØ ¸î °¡Áö À̾߱âÇغ¸°í ÀûÀýÇÑ ´ë¾ÈÀ» Á¦½ÃÇØ º»´Ù.
1.4. iBATIS¸¦ »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì
2.4.1 °³¹ßÀÚ°¡ ¸ðµç °Í¿¡ ´ëÇØ ¿µ¿øÇÑ °áÁ¤±ÇÀ» °®°í ÀÖÀ» ¶§¡¦
¸ðµç °áÁ¤±ÇÀ» °®°í ÀÖÀ» ¶§¶ó¸é, ÇÏÀÌÅÍ ³×ÀÌÆ®¿Í °°Àº ¿ÏÀüÇÑ °´Ã¼ °ü°è ¸ÅÇÎ ¼Ö·ç¼ÇÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÌ ¶§´Â °´Ã¼ °ü°è ¸ÅÆÛ°¡ Á¦°øÇØ ÁÖ´Â ¼³°è»óÀÇ ÀÌÁ¡°ú »ý»ê¼ºÇâ»óÀ» Á¦´ë·Î ´©¸± ¼ö ÀÖ´Ù.
2.4.2 ¾îÇø®ÄÉÀ̼ÇÀÌ ¿ÏÀüÈ÷ µ¿ÀûÀÎ SQLÀ» ¿ä±¸ÇÒ ¶§
¾ÖÇø®ÄÉÀ̼ÇÀÇ ÇÙ½É ±â´ÉÀÌ SQLÀ» µ¿ÀûÀ¸·Î »ý¼ºÇÏ´Â °ÍÀ̶ó¸é, iBATIS´Â ÁÁÁö ¸øÇÑ ¼±ÅÃÀÌ´Ù. ±×³É JDBC¸¦ »ç¿ëÇϰųª ȤÀº ÀڽŸ¸ÀÇ ÇÁ·¹ÀÓ¿öÅ©¸¦ Á÷Á¢ ¸¸µå´Â °Íµµ ÁÁ´Ù.
2.4.3 °ü°èÇü µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏÁö ¾ÊÀ» ¶§
iBATIS´Â ȯ°æ¿¡ ´ëÇØ ¸¹Àº ÀüÁ¦Á¶°ÇÀ» °ÉÁö´Â ¾Ê´Â´Ù. ÇÏÁö¸¸ Æ®·£Àè¼Ç°ú ÀüÅëÀûÀÎ SQL±×¸®°í ÀúÀå ÇÁ·Î½ÃÀú ±¸¹®À» Áö¿øÇÏ´Â ÁøÂ¥ °ü°èÇü µ¥ÀÌÅÍ º£À̽º¸¦ »ç¿ëÇÑ´Ù°í ¾î´ÀÁ¤µµ´Â °¡Á¤ÇÏ°í ÀÖ´Ù. ½ÇÁ¦·Î °ü°èÇü µ¥ÀÌÅÍ º£À̽º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ¼ø¼öÇÑ JDBC³ª Àú¼öÁØ ÆÄÀÏ ÀÔÃâ·Â API »ç¿ëÀ» ÃßõÇÑ´Ù.
2.4.4 ±×³É ÀÛµ¿ÇÏÁö ¾ÊÀ» °æ¿ì
iBATIS´Â Ä¿¹Â´ÏƼ°¡ ¼ºÀåÇÏ¸é¼ ³ªÅ¸³ª´Â ¿ä±¸»çÇ׿¡ ¸ÂÃç Áö¼ÓÀûÀ¸·Î ¸¹Àº ÈǸ¢ÇÑ ±â´ÉµéÀ» ±¸ÇöÇÏ°í ÀÖ´Ù. ÇÏÁö¸¸ iBATISµµ ¸î¸î ¾ÖÇ÷¹ÄÉÀ̼ÇÀÇ ¿ä±¸»çÇ×°ú´Â »ó¹ÝµÇ´Â°³¹ß ¹æÇâÀ̳ª ¼³°è ÁöħÀ» ºÐ¸íÈ÷ °¡Áö°í ÀÖ´Ù.ÀÌ·¯ÇÑ °æ¿ì¿¡ ´ëºñÇÏ¿© ¿ä±¸»çÇ׿¡ ¸Â¾Æ ¶³¾îÁöµµ·Ï iBATIS¸¦ È®ÀåÇÒ ¼ö ÀÖ´Â Ãß°¡ °¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϵµ·Ï ½ÃµµÇÑ´Ù.
1.5. 5ºÐ ³»¿¡ »ç¿ë °¡´ÉÇÑ iBATIS
°£´ÜÇÑ µ¥ÀÌÅͺ£À̽º Å×À̺íÀ» Á¶È¸ÇÏ´Â Á¤ÀûÀÎ SQL ¹®À» ¼³Á¤ÇÏ°í, ¾Æ·¡¿Í °°ÀÌ Äֿܼ¡ ±× °á°ú¸¦ Ãâ·ÂÇÑ´Ù.
java -classpath <¡¦> Main
Selected 2 records.
{USERNAME=LMEADORS, PASSSWORD=PICKLE, USERID=1, GROUPNAME=EMPLOYEE}
{USERNAME=JDOE, PASSSWORD=TEST, USERID=2, GROUPNAME=EMPLOYEE}
2.5.1µ¥ÀÌÅÍ º£À̽º ÁغñÇϱâ
¿ì¸®°¡ »ç¿ëÇÒ Å×À̺íÀ» »ý¼ºÇÏ°í ¸î °¡Áö »ùÇà µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ´Â MySQL ½ºÅ©¸³Æ®ÀÌ´Ù.
#
# Table structure for table 'user'
#
CREATE TABLE USER_ACCOUNT (
USERID INT(3) NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(10) NOT NULL,
PASSSWORD VARCHAR(30) NOT NULL,
GROUPNAME VARCHAR(10),
PRIMARY KEY (USERID)
);
#
# Data for table 'user'
#
INSERT INTO USER_ACCOUNT (USERNAME, PASSSWORD, GROUPNAME)
VALUES ('LMEADORS', 'PICKLE', 'EMPLOYEE');
INSERT INTO USER_ACCOUNT (USERNAME, PASSSWORD, GROUPNAME)
VALUES ('JDOE', 'TEST', 'EMPLOYEE');
COMMIT;
2.5.2 ÄÚµå ÀÛ¼ºÇϱâ
¿ì¸®ÀÇ Ã¹ ¹ø° ¿ÏÀüÇÑ ÇüÅÂÀÇ ¿¹Á¦ÀÌÀÚ iBATIS »ç¿ë¹ý¿¡ ´ëÇÑ ¼Ò°³ÀÌ´Ù. ŸÀÔ ¾ÈÁ¤¼º°ú¿¹¿Ü 󸮴 ³ªÁß¿¡ ¾Ë¾Æº¸µµ·Ï ÇÏ°í ¿©±â¼´Â °í·ÁÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
import com.ibatis.sqlmap.client.*;
import com.ibatis.common.resources.Resources;
import java.io.Reader;
import java.util.List;
public class Main {
public static void main(String arg[]) throws Exception {
String resource = "SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader (resource);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
List list = sqlMap.queryForList("getAllUsers", "EMPLOYEE");
System.out.println("Selected " + list.size() + " records.");
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
10ÁÙ Á¤µµÀÇ ÀÚ¹Ù ÄÚµå·Î iBATIS ¸¦ ¼³Á¤ÇÏ°í ±¸¹®À» ½ÇÇàÇÏ¿´À¸¸ç °á°ú¸¦ Ãâ·ÂÇß´Ù. À§ÀÇ ÀÚ¹Ù Äڵ常À¸·Î ¿Ïº®ÇÏ°Ô ÀÛµ¿ÇÏ´Â iBATIS ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µç °ÍÀÌ´Ù. ³ªÁß¿¡ ´õ°³¼±ÇÒ °ÍÀÌÁö¸¸, ÀÏ´ÜÀº ±âº»ÀûÀÎ ¼³Á¤ ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ.
2.5.3 iBATIS ¼³Á¤Çϱâ(¹Ì¸®º¸±â)
3Àå¿¡¼ iBATISÀÇ ¼³Á¤¿¡ ´ëÇØ ±íÀÌ ÀÖ°Ô ´Ù·ê °ÍÀ̱⠶§¹®¿¡ ¿©±â¼ °£´ÜÇÏ°Ô¸¸ »ìÆ캻´Ù. ¸ÕÀú SqlMapConfig.xml ÆÄÀÏÀ» º¸ÀÚ. ´ÙÀ½Àº ¿ì¸®ÀÇ °£´ÜÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» À§ÇÑSqlMapConfig.xml ÆÄÀÏÀ» º¸¿©ÁØ´Ù.
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
value="com.mysql.jdbc.Driver"/>
value="jdbc:mysql://localhost/test"/>
value="root"/>
value="blah"/>
À§ ¼³Á¤Àº µ¥ÀÌÅÍ º£À̽º¿¡ ¿¬°áÇÏ´Â ¹æ¹ý°ú »ç¿ë °¡´ÉÇÑ SQL Map ÆÄÀϵéÀ» iBATIS¿¡ ÁöÁ¤ÇØÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÇÙ½ÉÀÌ µÇ´Â ¼³Á¤ÆÄÀÏÀ» º¸¾ÒÀ¸´Ï, ÀÌÁ¦ ¿ì¸®´Â SqlMap.xml ÆÄÀÏÀ» »ìÆ캸ÀÚ.
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
GROUPNAME ÆĶó¹ÌÅ͸¦ À§ÇØ ÇϳªÀÇ ¹®ÀÚ¿ ÆĶó¹ÌÅ͸¦ ¹Þ°í °á°ú¸¦ HashMap¿¡ ¸ÅÇÎÇÑ´Ù.
2.5.4 ¾ÖÇø®ÄÉÀÌ¼Ç ºôµåÇϱâ
ºôµåÇϱâ À§ÇØ Å¬·¡½º Æнº¿¡ µÑ ÇÊ¿ä°¡ ÀÖ´Â JAR ÆÄÀÏÀº ibatis-common-2.jar ¿Í ibatis-sqlmap-2.jar ÀÌ´Ù. ±×·¯°í ³ª¼ ÀÚ¹Ù ÄÄÆÄÀÏ·¯¿¡ Ŭ·¡½º Æнº¸¦ ÁöÁ¤Çϱâ À§ÇØ ´ÙÀ½°ú°°ÀÌ ¸í·ÉÁÙÀ» ÀÛ¼ºÇÒ °ÍÀÌ´Ù.
javac -classpath
2.5.5 ¾ÖÇø®ÄÉÀÌ¼Ç ½ÇÇàÇϱâ
¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÒ ¶§ ¸î °³ÀÇ Ãß°¡ÀûÀÎ jar ÆÄÀÏÀÌ ÀÖ¾î¾ß ÇÏÁö¸¸ ¸¹Áö´Â ¾Ê´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϱâ À§ÇØ Å¬·¡½ºÆнº¿¡ µÎ¾î¾ß ÇÒ jar ÆÄÀÏÀº ibatis-common-2.jar, ibatis-sqlmap-2.jar, commons-logging.jar ±×¸®°í JDBC µå¶óÀ̹ö(ÀÌ °æ¿ì, mysql-connector-java.jar)ÀÌ´Ù. ÀÌÁ¦ ´ÙÀ½À¸·Î ¾Æ·¡ ¸í·ÉÀ» ÀÔ·ÂÇÑ´Ù.
java -classpath
ibatis-common-2.jar;ibatis-sqlmap-2.jar;.
Main
ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ °ÍÀÌ°í, ¾ó¸¶³ª ¸¹Àº ÇàÀÌ ¼±ÅõǾú´ÂÁö ¾Ë·ÁÁÖ°í, ´ÙÀ½°ú °°ÀÌ ´ë°ÀÇ ÇüÅ·Πµ¥ÀÌÅ͸¦ Ãâ·ÂÇÑ´Ù.
Selected 2 records.
{USERID=1, USERNAME=LMEADORS, PASSSWORD=PICKLE, GROUPNAME=EMPLOYEE}
{USERID=2, USERNAME=JDOE, PASSSWORD=TEST, GROUPNAME=EMPLOYEE}
1.6. ¹Ì·¡: iBATIS´Â ¾îµð·Î °¡´Â°¡?
2.6.1 Apache ¼ÒÇÁÆ®¿þ¾î Àç´Ü
iBATIS ´Â ±â¼úº¸´Ù´Â ¼ÒÇÁÆ®¿þ¾î¸¦ µÑ·¯½Ñ Ä¿¹Â´ÏƼ¿¡ ÁýÁßÇÑ´Ù.Apache´Â iBATIS¸¦ º¸È£Çϱâ À§ÇØ ÇÊ¿äÇÑ °ÍµéÀ» Á¦°øÇÏ°í, iBATIS¸¦ ¿øÇÏ´Â »ç¶÷µéÀÌ ÀÖ´ÂÇÑ °è¼ÓÇؼ ¿ì¸®°ç¿¡ ÀÖÀ» °ÍÀÌ´Ù.