IBATIS/myBatis
2017.05.22 / 18:10

iBATIS in Action (2/14)

ducati
Ãßõ ¼ö 210

iBATIS in Action (2/14)

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 ibatis-common-2.jar;

ibatis-sqlmap-2.jar Main.java

2.5.5 ¾ÖÇø®ÄÉÀ̼Ǡ½ÇÇàÇϱâ

¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÒ ¶§ ¸î °³ÀÇ Ãß°¡ÀûÀΠjar ÆÄÀÏÀÌ ÀÖ¾î¾ß ÇÏÁö¸¸ ¸¹Áö´Â ¾Ê´Ù¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϱâ À§ÇؠŬ·¡½ºÆнº¿¡ µÎ¾î¾ß ÇÒ jar ÆÄÀÏÀº ibatis-common-2.jar, ibatis-sqlmap-2.jar, commons-logging.jar ±×¸®°í JDBC µå¶óÀ̹ö(ÀÌ °æ¿ì, mysql-connector-java.jar)ÀÌ´ÙÀÌÁ¦ ´ÙÀ½À¸·Î ¾Æ·¡ ¸í·ÉÀ» ÀÔ·ÂÇÑ´Ù.

java -classpath ;mysql-connector.jar;commons-logging.jar;

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¸¦ ¿øÇϴ »ç¶÷µéÀÌ ÀÖ´ÂÇÑ °è¼ÓÇؼ­ ¿ì¸®°ç¿¡ ÀÖÀ» °ÍÀÌ´Ù.



Ãâó: http://devx.tistory.com/entry/iBATIS-in-Action-214 [Meta Developer Story]