Real Alternative DBMS ALTIBASE, Since 1999 ibatis 연동가이드 2010. 09 Copyright c 2000~2014 ALTBASE Corporation. All Rights Reserved.
Document Control Change Record Date Author Change Reference 2010-09 snkim Created Reviews Date Name (Position) Distribution Name Location ibatis 연동가이드 2 page of 36
목차 개요... 4 IBATIS 개요... 5 ibatis 란?... 5 ibatis 다운로드... 5 IBATIS 를이용한 SAMPLE 작성... 7 SqlMap 파일작성... 7 SqlMapConfig 파일작성... 8 SqlMapConfig 파일작성 ibatis.net 연동시... 9 Application 작성... 10 ALTIBASE 연동... 11 ALTIBASE JDBC Driver 얻는방법... 11 JDBC Driver 에설정하는방법... 11 SqlMapConfig 파일에 datasource 를설정하여 ALTIBASE 와연동... 12 FailOver 를이용한 Connection... 14 ALTIBASE5 와이전버전을동시에 Connection... 15 Procedure/Function 호출... 17 IBATIS, SPRING, ALTIBASE 연동... 19 Spring 에 datasource 를설정하는경우... 19 ibatis 에 datasource 를설정하는경우... 20 ALTIBASE 의 ConnectionPool 을이용... 21 트랜잭션관리... 23 ibatis 에서트랜잭션관리... 23 Spring 에서트랜잭션관리... 24 IBATIS 연동시고려사항... 25 LOB 데이터처리... 25 부록... 28 DB 테이블및시퀀스생성... 28 프로젝트생성... 28 SqlMap 파일작성... 29 SqlMapConfig 파일작성... 30 Application 작성... 31 관련 JAR 파일추가... 35 Application 실행... 35 ibatis 연동가이드 3 page of 36
개요 본문서는 ibatis 환경, ibatis+spring 환경에서 ALTIBASE와연동하는방법에대해기술한다. ibatis 2.3.4, Spring Framework 2.5.6, ALTIBASE는 5.3.3 버전, 개발 IDE로는 Eclipse를사용하였고, 문서이외에각 chapter 별도로예제가제공된다. 본문서와더불어개발시참고해야할문서들은다음과같다. 1. ALTIBASE 개발가이드 2. JAVA 개발가이드 3. ALTIBASE_JBOSS 연동가이드 4. ALTIBASE_TOMCAT 연동가이드 5. ALTIBASE_WEBSPHERE 연동가이드 6. ALTIBASE_WEBLOGIC 연동가이드 7. ALTIBASE_Spring 연동가이드 8. ALTIBASE_HIBERNATE 연동가이드 ibatis 연동가이드 4 page of 36
ibatis 개요 본장에서는 ibatis 의개념과특징, 다운로드및사용방법에대해살펴본다. ibatis 란? ibatis 란프로그래머가 DB 를보다편리하게핸들링할수있게해주는 ORM(Object Relational Mapping) 프레임워크로서 DB 테이블과 JAVA 객체와의관계를 mapping 시켜 persistence logic 처리를도와주는역할을한다. 즉, ibatis 를이용하면 DB 의테이블과 JavaBean 을 mapping(sqlmap XML 파일 ) 시켜 DB 에 CRUD( 생성, 조회, 수정, 삭제 ) 작업을쉽게할수있다. 기존의 JDBC 를이용하여프로그래밍하는방식은프로그램소스안에 SQL 문을작성하였지만, ibatis 를이용하면 SQL 문을프로그램에서분리하여 XML 파일에별도로작성한다. 따라서프로그래머가기존의 JDBC 를사용할때보다프로그래밍하는부담이줄어들게된다. 뿐만아니라 SQL 을변경하고자할경우기존처럼프로그램을수정하는것이아니라 XML 파일의 SQL 문만을변경하면되기때문에 SQL 변환이자유롭다는특징이있다. 다음은 ibatis 에서 xml(sqlmap.xml) 로작성된 SQL 을 DB 와어떻게통신하는지를간단히보여주는그림이다. 사용자는 CRUD 에대한각각의 SQL 문은 SqlMap XML 파일에작성하고이파일들을 SqlMapConfig XML 파일에작성하면 ibatis API 를통해자동으로 Mapping 된 Statement 객체들을생성하여이를통해 DB 에 SQL 문을실행하게된다. ibatis 의보다자세한아키텍처는다음의사이트를참고하면된다. http://ibatis.apache.org ibatis 다운로드 ibatis 를사용하기위해서 ibatis 관련 jar 파일이필요하다. 이 jar 파일은 http://ibatis.apache.org/java.cgi 사이트에서다운로드받을수있다. 다운로드받은파일의압축을풀면압축푼디렉토리안의 lib 디렉토리에 jar 파일이존재하는데이 ibatis 연동가이드 5 page of 36
jar 파일을이용하여 ibatis 와연동하면된다. 만약, ibatis 패키지가 ibatis-2.3.4.726.zip 이라면압축을푼디렉토리의 lib 디렉토리에 ibatis-2.3.4.726.jar 파일이한다. 기존 ibatis 버전에서는 ibatis-comm.jar, ibatis-sqlmap.jar 파일들이필요했지만, ibatis 2.3.4 버전에서는 ibatis-comm.jar 파일과 ibatis-sqlmap.jar 파일이 ibatis-2.3.4.x.jar 파일로통합되었다. 본문서에서는 ibatis-2.3.4.726.jar 를사용하였다. ibatis 연동가이드 6 page of 36
ibatis 를이용한 sample 작성 ibatis를이용하여 SQL문을처리하기위해서는 SqlMapConfig XML 파일과 SqlMap XML 파일을작성해야한다. 파일들은프로그래머에게 JavaBean을 PreparedStatement의파라미터와 ResultSet으로쉽게 mapping 할수있도록해준다. 본장에서는 SqlMapConfig XML 파일, SqlMap XML 파일을작성하는방법과 application에서이파일을이용하여실제로 SQL을처리하는방법에대해설명한다. Sample 프로그램을작성하는보다자세한내용은부록부분을참고하면된다. 이 SqlMap 파일작성 SqlMap XML 파일은 DB 로전송할 SQL 구문, PreparedStatement 로 binding 될 parameter 의 mapping, ResultSet 의 result 의 mapping 들을명시하는파일이다. 다음은 person 테이블에 CRUD 를처리하는 SqlMap XML 파일을작성한예제이다. (Person.xml) <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmap PUBLIC "-//ibatis.com//dtd SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-mapconfig-2.dtd"> <sqlmap namespace="person"> <resultmap id="personresult" class="examples.domain.person"> <result property="id" column="per_id" /> <result property="name" column="per_name" /> <result property="birthdate" column="per_birth_date" /> <result property="weightinkilograms" column="per_weight_kg" /> <result property="heightinmeters" column="per_height_m" /> </resultmap> <select id="getperson" parameterclass="int" resultclass="examples.domain.person"> <![CDATA[ SELECT PER_ID as id, PER_NAME as name, PER_BIRTH_DATE as birthdate, PER_WEIGHT_KG as weightinkilograms, PER_HEIGHT_M as heightinmeters FROM PERSON WHERE PER_ID = #value# ]]> </select> <insert id="insertperson" parameterclass="examples.domain.person"> <![CDATA[ INSERT INTO PERSON (PER_ID, PER_NAME, PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M) VALUES (#id#, #name#, #birthdate#, #weightinkilograms#, #heightinmeters#) ]]> </insert> <update id="updateperson" parameterclass="examples.domain.person"> <![CDATA[ UPDATE PERSON ibatis 연동가이드 7 page of 36
</update> ]]> SET PER_NAME = #name#, PER_BIRTH_DATE = #birthdate#, PER_WEIGHT_KG = #weightinkilograms#, PER_HEIGHT_M = #heightinmeters# WHERE PER_ID = #id# <delete id="deleteperson" parameterclass="int"> <![CDATA[ DELETE PERSON WHERE PER_ID = #id# ]]> </delete> <select id="getallpersons" resultmap="personresult"> <![CDATA[ SELECT * FROM person ]]> </select> </sqlmap> <resultmap> 태그에는 SELECT 문을실행후 ResultSet 에담길데이터들의 Map 객체에대해정의하고, <insert>, <update>, <delete>, <select> 태그에는 CRUD 의작업에대한각각의 SQL 문을정의한다. 각각의태그에대한보다자세한설명은 http://ibatis.apache.org 사이트를참고하거나첨부된문서 ibatis-sqlmaps-2-ko.pdf 파일을참고하면된다. SqlMapConfig 파일작성 SqlMapConfig 파일은 DB 연결을위한 datasource, SqlMap 파일의경로, 그외 SqlMapClient 를제어할 property 들을작성하는 SQL Maps 설정파일이다. 다음은 SqlMapConfig 파일 (SqlMapConfigExample.xml) 예제이다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmapconfig PUBLIC "-//ibatis.com//dtd SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlmapconfig> <properties resource="db.properties" /> <settings cachemodelsenabled="true" enhancementenabled="true" lazyloadingenabled="true" maxrequests="32" maxsessions="10" maxtransactions="5" usestatementnamespaces="false" /> <transactionmanager type="jdbc" > <datasource type="simple"> <property name="jdbc.driver" value="${driver"/> <property name="jdbc.connectionurl" value="${url"/> ibatis 연동가이드 8 page of 36
<property name="jdbc.username" value="${username"/> <property name="jdbc.password" value="${password"/> <property name="pool.maximumactiveconnections" value="10"/> <property name="pool.maximumidleconnections" value="5"/> <property name="pool.maximumcheckouttime" value="120000"/> <property name="pool.timetowait" value="500"/> <property name="pool.pingquery" value="select 1 from dual"/> <property name="pool.pingenabled" value="false"/> <property name="pool.pingconnectionsolderthan" value="1"/> <property name="pool.pingconnectionsnotusedfor" value="1"/> </datasource> </transactionmanager> <sqlmap resource="person.xml" /> </sqlmapconfig> <properties> 태그에는 name=value 형태로정의된 property 들을작성한 properties 파일의경로및이름을명시해주고, <settings> 태그에는 SqlMapClient 를제어할 property 들을, <transactionmanager> 와 <datasource> 에는연결할 DB 정보를작성한다. 또, <SqlMap> 태그에는미리작성한 SqlMap 파일들의경로및이름을작성한다. 각각의태그에대한보다자세한설명은 http://ibatis.apache.org 사이트를참고하거나첨부된문서 ibatis-sqlmaps-2-ko.pdf 파일을참고하면된다. SqlMapConfig 파일작성 ibatis.net 연동시 ODBC 를통한접속시 SqlMap.config 의알티베이스연결설정방법을간단히설명한다. 먼저알티베이스 ODBC Driver 설치및 ODBC 데이터원본관리자에서사용자 DSN 을추가해야한다. ODBC 설치및설정방법은기술문서 ALTIBASE_Windows_ODBC_ 개발가이드 를참고한다. <!-- Database connection information --> <database> <provider name="odbc2.0"/> <datasource name="altibase" connectionstring="dsn=altibase5;user ID=sys;PASSWORD=manager"/> </database> providers.config에정의된여러 DBMS Provider 중에서알티베이스접속시사용할 Provider 는 Odbc2.0 이다. <provider> 태그에 Odbc2.0 을작성한다. <datasource> 태그에서 connectionstring 에 ODBC 데이터원본관리자에서추가한 DSN 을입력한다. ibatis 연동가이드 9 page of 36
Application 작성 Application 에서 SqlMapClient 인스턴스를이용하여 DB 테이블에 Mapping 된객체와연동하여 CRUD 작업을처리할수있다. ibatis 를이용하여 DB 와연동하기위해서는먼저 SqlMapConfig 파일을통해 SqlMapClient 객체를얻어와야한다. 이후 SqlMapClient 객체를통해 CRUD 에해당하는메소드를호출하여 DB 와통신하면된다. 다음은 DB 의 person 테이블에데이터를삽입, 변경, 삭제, 조회하는 application 이다. 예 ) SimpleConnection 의 PersonApp.java String resource ="SqlMapConfigExample.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlMapClient sqlmap = SqlMapClientBuilder.buildSqlMapClient(reader); //insert Person Person newperson1 = new Person(); sqlmap.insert ("insertperson", newperson1); //select all Persons List<Person> list = (List<Person>)sqlMap.queryForList("getAllPersons"); //update Person sqlmap.update("updateperson", newperson1); //get Person Person person = (Person) sqlmap.queryforobject ("getperson", personpk); //delete Person sqlmap.delete ("deleteperson", new Integer(1)); 먼저 SqlMapConfig 파일을읽어들여 SqlMapClient 객체를얻어온다. ( ) String resource ="SqlMapConfigExample.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlMapClient sqlmap = SqlMapClientBuilder.buildSqlMapClient(reader); 이후 CRUD 에해당하는 SqlMapClient 클래스의각각의메소드를호출한다. ( ) sqlmap.insert(), sqlmap.queryforlist(), sqlmap.queryforobject(),sqlmap.update(), sqlmap.delete() 각메소드의자세한설명은 http://ibatis.apache.org 사이트를참고하거나첨부된문서 ibatis-sqlmaps-2-ko.pdf 파일을참고하면된다. ibatis 연동가이드 10 page of 36
ALTIBASE 연동 ibatis 에서 ALTIBASE 를연동하는위해서는 ALTIBASE JDBC Driver 를 setting 하고 SqlMapConfig 파일에 ALTIBASE 를위한 datasource 를지정하면된다. 본장에서는 ALTIBASE JDBC Driver 를얻는방법, JDBC Driver 를설정하는방법, SqlMapConfig 에 datasource 를설정하는방법에대해설명한다. 또한, FailOver 기능을사용하는방법, 여러버전의 ALTIBASE 와연동하는방법, Stored Procedure/Function 을호출하는방법에대해서도살펴본다. ALTIBASE JDBC Driver 얻는방법 ALTIBASE 에서제공하는 JDBC driver 는 Altibase.jar 파일이다. 이파일은 ALTIBASE 가설치되어있는서버의 $ALTIBASE_HOME/lib 디렉토리안에존재한다. ALTIBASE 5 버전부터는 $ALTIBASE_HOME/lib 디렉토리에 Altibase.jar 파일과 Altibase5.jar 파일이존재하는데, Altibase.jar 는일반 JDBC Driver 파일이고, Altibase5.jar 는 ALTIBASE 5 버전과그이하의버전을함께연동하고싶을때사용하는 JDBC Driver 파일이다. 따라서하나의 ALTIBASE DB 와연동하거나, 또는버전이동일한여러대의 ALTIBASE 와연동할경우에는 $ALTIBASE_HOME/lib/Altibase.jar 파일을사용하면된다. 연동하려는 ALTIBASE DB Server 와 ALTIBASE JDBC Driver 가호환가능한지확인을위해 ALTIBASE JDBC Driver 버전확인이필요하다. ALTIBASE JDBC Driver 버전을확인하는방법은다음의명령어를수행하면된다. $ java jar Altibase.jar JDBC Driver Info : 13 2010 14:35:28 Altibase Ver = 5.3.3.13 for JavaVM v1.4, CMP:5.6.1, $Revision: 14502 $ Jan 이때, ALTIBASE DB Server 의 cm protocol version 과 ALTIBASE JDBC Driver 의 CMP 가동일하면호환가능하다. $ altibase -v version 5.3.3.13 XEON_LINUX_redhat_Enterprise_AS4-64bit-5.3.3.13-release-GCC3.4.6 (xeonredhat-linux-gnu) Jan 13 2010 14:35:30, binary db version 5.4.1, meta version 5.6.1, cm protocol version 5.6.1, replication protocol version 5.4.1 버전이 UP 되면서 JDBC 관련버그가 fix 되었을가능성이있으므로, 일반적으로 ALTIBASE DB Server 의버전과같거나이보다더최신의 ALTIBASE JDBC Driver 파일을사용하는것을권장한다. JDBC Driver 에설정하는방법 다운로드받은 JDBC Driver 인 Altibase.jar 파일은 classpath 에추가하거나웹서버의적절한디렉토리에위치시킨다. 만약, Eclipse 를사용하여개발한다면다음과같이해당프로젝트에 ALTIBASE JDBC Driver 를추가할수있다. ibatis 연동가이드 11 page of 36
프로젝트 JRE System Library [J2SE-1.5] - Properties Installed JREs 항목중 jre 를클릭 Edit Add External JARs 를클릭하여 ALTIBASE JDBC Driver 인 Altibase.jar 를추가한다. SqlMapConfig 파일에 datasource 를설정하여 ALTIBASE 와연동 SqlMapConfig 파일의 <transactionmanager> 태그에 ALTIBASE 용 property 를지정하여 ALTIBASE 와연결하면된다. 이때 SqlMapConfig 파일에직접 property 값을입력할수있고, 또는별도의 properties 파일을작성하여이파일에작성된 property 값을로딩하여사용할수도있다. ibatis 연동가이드 12 page of 36
다음은 db.properties 라는 properties 파일에 ALTIBASE 에대한 property 들을정의하고, 이 property 들을읽어와 SqlMapConfig 파일에서사용하는예제이다. 예 ) SimpleConnection 의 db.properties 파일 driver=altibase.jdbc.driver.altibasedriver url=jdbc:altibase://192.168.1.35:21129/mydb username=sys password=manager 이파일에설정된각각의값의의미는다음과같다. Property 설명 driver url username password ALTIBASE JDBC driver class Name ALTIBASE 와연결을위한 Connection string 정보 jdbc:altibase://ip:port_no/db_name 형태로기입 데이터베이스계정 데이터베이스패스워드 예 ) SimpleConnection 의 SqlMapConfigExample.xml 파일 <sqlmapconfig> <properties resource="db.properties" /> <transactionmanager type="jdbc" > <datasource type="simple"> -- SIMPLE 은내장된트랜잭션관리자이름 <property name="jdbc.driver" value="${driver"/> <property name="jdbc.connectionurl" value="${url"/> <property name="jdbc.username" value="${username"/> <property name="jdbc.password" value="${password"/> </datasource> </transactionmanager> <sqlmap resource="person.xml" /> </sqlmapconfig> db.properties 에지정한 driver, url, username, password property 들을읽어와 datasource 의 JDBC.Driver, JDBC.ConnectionURL, JDBC.Username, JDBC.password property 에 setting 하고있다. 위의예제 SimpleConnection 프로젝트를실행하기위해서는 Altibase.jar, ibatis- 2.3.4.x.jar 파일이필요하다. ibatis 연동가이드 13 page of 36
FailOver 를이용한 Connection ALTIBASE 5.3.3 부터 FailOver 를지원하는데, FailOver 기능을사용하기위해서는 datasource 의 Connection url 을적어주는부분에 FailOver 관련속성을넣어주면된다. 다음은 FailOver 를이용하여 ALTIBASE 에연결하는예제이다. db.properties 파일에 Connection url 부분을정의하였다. 예 ) FailOverSample 의 db.properties 파일 driver=altibase.jdbc.driver.altibasedriver url=jdbc:altibase://192.168.6.224:21129/mydb? AlternateServers=(192.168.1.35:21129)& ConnectionRetryCount=1&ConnectionRetryDelay=1& SessionFailOver=on&LoadBalance=off username=sys password=manager 위의파일에지정한 Connection url 부분에정의할수있는 FailOver 관련 property 는다음과같다. Property AlternateServer ConnectionRetryCount ConnectionRetryDelay LoadBalance SessionFailOver 설명 장애발생시접속하게될가용서버를나타내며 (IP Address1:Port1, IP Address2:Port2,...) 형식으로기술한다. 가용서버접속실패시, 접속시도반복횟수 가용서버접속실패시, 다시접속을시도하기전에대기하는시간 ( 초단위 ) on 으로설정하면최초접속시도시에기본서버와가용서버를포함하여랜덤으로선택한다. off 로설정하면최초접속시도시에기본서버에접속하고, 접속에실패하면 AlternateServer 로기술한서버에접속한다. STF(Service Time Fail-Over) 를할것인지여부를나타낸다. on : STF, off : CTF CTF(Connection Time Fail-Over) 는 DBMS 접속시점에장애를인식하여다른정상서버로접속을재시도하는것을의미한다. STF(Service Time Fail-Over) 는서비스하는도중에장애를감지하여다른가용노드의 DBMS 에다시접속하여세션의프로퍼티를복구한후사용자응용프로그램의업무로직을다시수행할수있도록하는것을의미한다. (STF 는 DB 접속에대해서만 Fail-Over 를수행해주는것이며실패한트랜잭션에대해서는사용자에의해재처리되어야한다 ) 위의예제 FailOverSample 프로젝트를실행하기위해서는 SqlMapConfig 파일에 datasource 를설정하여 ALTIBASE 와연동 과마찬가지로 Altibase.jar, ibatis-2.3.4.x.jar 파일이필요하다. ibatis 연동가이드 14 page of 36
ALTIBASE5 와이전버전을동시에 Connection ALTIBASE 5 부터는하나의어플리케이션에서 ALTIBASE 5 와 ALTIBASE 4 혹은 ALTIBASE 3 와동시에연결할수있도록 ALTIBASE 5 버전전용의 JDBC Driver(Altibase5.jar) 를제공한다. 이 Driver 를이용하면 ALTIBASE 5 ALTIBASE 4, 혹은 ALTIBASE 5 ALTIBASE 3, ALTIBASE 5.1.5 ALTIBASE 5.3.3 간두버전의 ALTIBASE 에접속이가능하다. 기존의 Altibase.jar 와구별하기위해별도로 ALTIBASE 5 전용의 Altibase5.jar 가필요하다. 또한 datasource 에지정해주는부분에 JDBC Driver 클래스이름도기존의 Altibase.jdbc.driver.AltibaseDriver 대신 ALTIBASE 5 전용의 Altibase5.jdbc.driver.AltibaseDriver 를지정해야한다. ibatis 에다른버전의 ALTIBASE 와연동하기위해서는각버전에해당하는 SqlMapConfig 파일을별도로작성하여어플리케이션에서각각의 SqlMapConfig 파일을읽어드리면된다. 이때주의할점은프로그램에서 Altibase5.jdbc.driver.AltibaseDriver 를먼저로딩한후에 Altibase.jdbc.driver.AltibaseDriver 를로딩해야한다는것이다. 다음은 Altibase.jar 와 Altibase5.jar 파일을이용하여두버전의 ALTIBASE 의드라이버를로딩하는예제이다. 예 ) MultiVersionConnection 의 db.properties1 파일 ALTIBASE 5 버전에대한설정 driver=altibase5.jdbc.driver.altibasedriver url=jdbc:altibase://192.168.6.224:21129/mydb username=sys password=manager 예 ) MultiVersionConnection 의 db.properties2 파일 ALTIBASE 5 이전버전에대한설정 driver=altibase.jdbc.driver.altibasedriver url=jdbc:altibase://192.168.1.35:21129/mydb username=sys password=manager 예 ) MultiVersionConnection 의 SqlMapConfigExample1.xml 파일 ALTIBASE 5 버전에대한설정 <sqlmapconfig> <properties resource="db.properties1" /> <transactionmanager type="jdbc" > <datasource type="simple"> <property name="jdbc.driver" value="${driver"/> <property name="jdbc.connectionurl" value="${url"/> <property name="jdbc.username" value="${username"/> <property name="jdbc.password" value="${password"/> </datasource> </transactionmanager> <sqlmap resource="person.xml" /> </sqlmapconfig> 예 ) MultiVersionConnection 의 SqlMapConfigExample2.xml 파일 ibatis 연동가이드 15 page of 36
ALTIBASE 5 이전버전에대한설정 <sqlmapconfig> <properties resource="db.properties2" /> <transactionmanager type="jdbc" > <datasource type="simple"> <property name="jdbc.driver" value="${driver"/> <property name="jdbc.connectionurl" value="${url"/> <property name="jdbc.username" value="${username"/> <property name="jdbc.password" value="${password"/> </datasource> </transactionmanager> <sqlmap resource="person.xml" /> </sqlmapconfig> 예 ) MultiVersionConnection 의 PersonApp.java 파일 String resource1 ="SqlMapConfigExample1.xml"; Reader reader1 = Resources.getResourceAsReader(resource1); SqlMapClient sqlmap1 = SqlMapClientBuilder.buildSqlMapClient(reader1); String resource2 ="SqlMapConfigExample2.xml"; Reader reader2 = Resources.getResourceAsReader(resource2); SqlMapClient sqlmap2 = SqlMapClientBuilder.buildSqlMapClient(reader2); 위의 PersonApp.java 예제를보면 Altibase5.jdbc.driver.AltibaseDriver 를 Altibase.jdbc.driver.AltibaseDriver 보다먼저로딩하기위해 Altibase5.jdbc.driver.AltibaseDriver 를 JDBC.Driver 로사용하는 SqlMapConfigExample1.xml 파일을먼저읽어드리고있다. 반드시 ALTIBASE5 전용의드라이버를먼저로딩해야한다. 예제에포함된 MultiVersionConnection 프로젝트를실행하기위해서는기존에사용했던 ibatis-2.3.4.x.jar 파일뿐만아니라, Altibase.jar 와 Altibase5.jar 파일이더필요하다. 이파일들은 ALTIBASE 가설치된디렉토리 ($ALTIBASE_HOME) 의 lib 디렉토리안에존재하는데 ALTIBASE 5 버전의 Altibase5.jar 파일, 그이전버전의 Altibase.jar 파일을사용하면된다. ibatis 연동가이드 16 page of 36
Procedure/Function 호출 ibatis 에서 DB 에생성한 Stored Procedure/Function 을호출할경우에는 SqlMap 파일에 Stored Procedure/Function 에정의된 parameter 에대한정보를설정해주고, <procedure> 태그에 CallableStatement 에적용되는 Procedure/Function 을호출하는문장을정의해주면된다. 다음은 Stored Procedure/Function 을호출하는예제이다. 예 ) ProcedureSample 의 Procedure/Function 생성구문 CREATE OR REPLACE PROCEDURE sum_proc ( p_num1 IN NUMBER, p_num2 IN NUMBER, p_num3 OUT NUMBER ) AS BEGIN p_num3 := p_num1 + p_num2; END; / CREATE OR REPLACE FUNCTION sum_func ( p_num1 IN NUMBER, p_num2 IN NUMBER ) RETURN NUMBER AS v_num NUMBER; BEGIN v_num := p_num1 + p_num2; RETURN v_num; END; / 예 ) Procedure 의 Procedure.xml(SqlMap) 파일 <sqlmap namespace="procedure"> <parametermap id="procedureparam" class="java.util.map"> <parameter property="p_num1" jdbctype="numeric" javatype="int" mode="in" /> <parameter property="p_num2" jdbctype="numeric" javatype="int" mode="in" /> <parameter property="p_num3" jdbctype="numeric" javatype="int" mode="out"/> </parametermap> <parametermap id="functionparam" class="java.util.map"> <parameter property="p_num3" jdbctype="numeric" javatype="int" mode="out"/> <parameter property="p_num1" jdbctype="numeric" javatype="int" mode="in" /> <parameter property="p_num2" jdbctype="numeric" javatype="int" mode="in" /> </parametermap> ibatis 연동가이드 17 page of 36
<procedure id="sumproc" parametermap="procedureparam" > {call sum_proc(?,?,?) </procedure> <procedure id="sumfunc" parametermap="functionparam" > {call? := sum_func(?,?) </procedure> </sqlmap> <paramatermap> 태그에 Procedure/Function 의파라미터에대한타입과 IN/OUT 설정을정의하고 <procedure> 태그에서 parametermap 속성에 <paramatermap> 태그의 id 값을명시해준다. 그리고 <procedure> 태그에 Procedure/Function 을호출하는문장을작성해준다. ProcedureSample 예제를실행하기위해서는 SqlMapConfig 파일에 datasource 를설정하여 ALTIBASE 와연동 과마찬가지로 Altibase.jar, ibatis-2.3.4.x.jar 파일이필요하다. ibatis 연동가이드 18 page of 36
ibatis, Spring, ALTIBASE 연동 ALTIBASE 와연동하기위해서는 ibatis 에 datasource 를지정할수도있고, Spring 에 datasource 를지정할수도있다. 본장에서는이두방법을이용하여 ATLIBASE 와연동하는방법에대해설명한다. Spring 에 datasource 를설정하는경우 ibatis 와 Spring 을함께사용하기위해서는 Spring 의 applicationcontext.xml 파일에 ibatis 의 SqlMapClientFactoryBean bean 을지정해주면된다. 이후각각의 DAO bean 에 SqlMapClientFactoryBean bean 을참조하도록설정해주면다른 bean 에서 SqlMapClient 객체를사용하여 CRUD 에해당하는메소드들을호출할수있다. ibatis, Spring 을연동한환경에서 Spring 에 datasource 를설정하는방법은 ALTIBASE_Spring_ 연동가이드 문서에서설명한방법들중하나를선택하여 applicationcontext.xml 에 datasource 를지정해주고, ibatis 와연동을위해 ibatis 의 SqlMapClientFactoryBean bean 을지정해주면된다. 이때 SqlMapClientFactoryBean bean 의 configlocation property 에 SqlMapConfig 파일의이름을명시해준다. 다음은 applicationcontext.xml 파일에서 datasource 와 SqlMapClientFactoryBean bean 을지정해주는예제이다. 예 ) SpringIbatisConnection1 의 applicationcontext.xml 파일 <!-- DriverManagerDataSource 클래스를이용한데이터소스설정 --> <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <!-- JDBC Driver 클래스명설정 --> <property name="driverclassname" value="altibase.jdbc.driver.altibasedriver"/> <!-- connection url--> <property name="url" value="jdbc:altibase://192.168.1.35:21129/mydb"/> <!-- DB 사용자계정설정 --> <property name="username" value="sys"/> <!-- DB 사용자패스워드설정 --> <property name="password" value="manager" /> </bean> <bean id="sqlmapclient" class="org.springframework.orm.ibatis.sqlmapclientfactorybean"> <property name="datasource" ref="datasource"/> <property name="configlocation" value="sqlmapconfigexample.xml"/> </bean> <!-- DAO 클래스의 bean 설정 --> <bean id="persondao" class="examples.domain.persondao"> <property name="sqlmapclient" ref="sqlmapclient"/> </bean> 위의예제 SpringIbatisConnection1 프로젝트를실행하기위해서는 Altibase.jar, ibatis- 2.3.4.x.jar 파일과 spring-jdbc.jar, spring-orm.jar, spring.jar, commons-logging.jar 파일이필요하다. spring-jdbc.jar, spring-orm.jar, spring.jar, commons-logging.jar 파일은 Spring ibatis 연동가이드 19 page of 36
Framework 에포함된파일이다. 자세한디렉토리위치는 ALTIBASE_Spring_ 연동가이드 문서를참고하면된다. ibatis 에 datasource 를설정하는경우 ibatis, Spring 을연동한환경에서 ibatis 에 datasource 를설정하는방법은위의 SqlMapConfig 파일에 datasource 를설정하여 ALTIBASE 와연동 부분에서설명한방법과동일한방법으로 SqlMapConfig 파일에 <transactionmanager> 에 ALTIBASE 연결을위한 property 를지정하면된다. 다만, Spring 에서 ibatis 를연동하기위해위의 Spring 에서 datasource 를설정하는경우 와마찬가지로 ibatis 의 SqlMapClientFactoryBean bean 을 applicationcontext.xml 파일에지정해줘야한다. 다음은 ibatis 와 Spring 연동환경에서 ibatis 에 datasource 를설정하여 ALTIBASE 와연동하는예제이다. 예 ) SpringIbatisConnection2 의 applicationcontext.xml 파일 <bean id="sqlmapclient" class="org.springframework.orm.ibatis.sqlmapclientfactorybean"> <property name="configlocation" value="sqlmapconfigexample.xml"/> </bean> <!-- DAO 클래스의 bean 설정 --> <bean id="persondao" class="examples.domain.persondao"> <property name="sqlmapclient" ref="sqlmapclient"/> </bean> 예 ) SpringIbatisConnection2 의 SqlMapConfigExample.xml 파일 <sqlmapconfig> <properties resource="db.properties" /> <transactionmanager type="jdbc" > <datasource type="simple"> ibatis 연동가이드 20 page of 36
<property name="jdbc.driver" value="${driver"/> <property name="jdbc.connectionurl" value="${url"/> <property name="jdbc.username" value="${username"/> <property name="jdbc.password" value="${password"/ </datasource> </transactionmanager> <sqlmap resource="person.xml" /> </sqlmapconfig> 위의예제를보면 datasource 를 SqlMapConfigExample.xml 에설정하고 applicationcontext.xml 파일에는이 SqlMapConfigExample.xml 파일을읽어 SqlMapClientFactoryBean bean 을설정하고있는것을확인할수있다. SpringIbatisConnection2 예제를실행하기위해서는 Altibase.jar, ibatis-2.3.4.x.jar 파일과 spring-orm.jar, spring.jar, commons-logging.jar 파일이필요하다. spring-orm.jar, spring.jar, commons-logging.jar 파일은 Spring Framework 에포함된파일이다. 자세한디렉토리위치는 ALTIBASE_Spring_ 연동가이드 문서를참고하면된다. ALTIBASE 의 ConnectionPool 을이용 ALTIBASE 에서제공하는 AltibaseConnectionPoolDataSource 클래스를사용하면 ALTIBASE 의 ConnectionPool 을이용할수있는데, ibatis, Spring 연동환경에서는 Spring 의 applicationcontext.xml 파일에 AltibaseConnectionPoolDataSource 클래스를이용하여 datasource bean 을정의하면된다. Spring 과연동없이 ibatis 에서만 ALTIBASE 의 ConnectionPool 을사용할수있는방법은없다는것을주의해야한다. 자세한내용은 ALTIBASE_Spring_ 연동가이드 문서를참고하여설정하면된다. 예 ) ALTIBASE_Spring_ 연동가이드 에첨부된 AltibaseConnectionPool 의 applicationcontext.xml 파일 <bean id="datasource" class="altibase.jdbc.driver.altibaseconnectionpooldatasource"> <!-- connection url--> <property name="url" value="jdbc:altibase://192.168.1.35:21129/mydb"/> ibatis 연동가이드 21 page of 36
<!-- DB 사용자계정설정 --> <property name="user" value="sys"/> <!-- DB 사용자패스워드설정 --> <property name="password" value="manager" /> </bean> ibatis 연동가이드 22 page of 36
트랜잭션관리 ibatis 에서 DB 와연동할경우 SqlMapConfig 파일의 <transactionmanager> 에 datasource 를지정하면 SqlMap 파일에서정의한각각의 CRUD 메소드가호출될때자동으로 setautocommit(false); 가호출이된다. 이후해당메소드가종료되면트랜잭션은 commit 이되고다시 default autocommit 모드로바뀌게된다. 또한프로그래머가어플리케이션에서명시적으로트랜잭션을관리할수도있다. 만약, ibatis 와 Spring 을연동하였다면 Spring 에서도트랜잭션을관리할수있다. 본장에서는이러한트랜잭션관리방법들을소개한다. ibatis 에서트랜잭션관리 ibatis 에서 DB 와연동할경우 SqlMapConfig 파일의 <transactionmanager> 에 datasource 를지정하면 SqlMap 파일에서정의한각각의 CRUD 메소드가호출될때자동으로 setautocommit(false); 가호출이된다. 이후해당메소드가종료되면트랜잭션은 commit 이되고다시 default autocommit 모드로바뀌게된다. 또한어플리케이션에서프로그래머가직접트랜잭션을관리할수있다. 이때, 트랜잭션을시작하기위해서는 SqlMapClient 의 starttransaction() 메소드를호출하고, commit 하고자할경우에는 committransaction () 메소드, commit 없이 rollback 하고자할경우에는 endtransaction() 메소드를호출하면된다. 다음은어플리케이션에서명시적으로트랜잭션을처리하는예제이다.. 예 ) TransactionSample 의 PersonApp.java 파일 SqlMapClient sqlmap = SqlMapClientBuilder.buildSqlMapClient(reader); //start transaction sqlmap.starttransaction(); //insert Person Person newperson1 = new Person(); sqlmap.insert ("insertperson", newperson1); //commit sqlmap.committransaction (); Person newperson2 = new Person(); sqlmap.insert ("insertperson", newperson2); // selected 2 rows. List<Person> list = (List<Person>)sqlMap.queryForList("getAllPersons"); System.out.println("Selected "+list.size()+" records."); for(int i=0; i< list.size();i++){ System.out.println(list.get(i)); //rollback sqlmap.endtransaction(); // selected only 1 row. ibatis 연동가이드 23 page of 36
list = (List<Person>)sqlMap.queryForList("getAllPersons"); System.out.println("Selected "+list.size()+" records."); for(int i=0; i< list.size();i++){ System.out.println(list.get(i)); 위의예제 TransactionSample 프로젝트를실행하기위해서는 SqlMapConfig 파일에 datasource 를설정하여 ALTIBASE 와연동 과마찬가지로 Altibase.jar, ibatis-2.3.4.x.jar 파일이필요하다. Spring 에서트랜잭션관리 ibatis, Spring 을연동한환경이라면, Spring 에서트랜잭션을관리할수있다. 본문서에서는 Spring 의 applicationcontext.xml 파일에선언적으로트랜잭션을관리 / 처리하는예제 (LobSpringIbatisSample 예제 ) 를포함하고있다. 보다자세한내용은 ALTIBASE_Spring_ 연동가이드 문서를참고하면된다. ibatis 연동가이드 24 page of 36
ibatis 연동시고려사항 Spring 에서 ALTIBASE 에연동할경우고려해야할사항에대해설명한다. LOB 데이터처리 ibatis 에서 LOB 을처리하기위해서는 SqlMap 파일에 parameter 와 result 에대한정보를 setting 하는부분에반드시 jdbctype 을 CLOB/BLOB 이라고명시를해줘야한다. 그렇지않을경우에길이제한에의해올바르지않은데이터를입력하거나잘못된데이터를질의할수있다. 혹은 Invalid length 등의에러가발생할수도있다. 따라서반드시 parameter 와 result 에대한 mapping 을 CLOB/BLOB 으로지정해줘야한다. 다음은 CLOB 타입의데이터에대한 parametermap 과 resultmap 을지정하여 setting 하고있는예제이다. 예 ) LobSample 의 LobSample.xml(SqlMap) 파일 <sqlmap namespace="lobsample"> <resultmap id="lobsampleresult" class="com.altibase.lob.lobsample"> <result property="lob_id" column="lob_id" /> <result property="lobcolumn" column="lobcolumn" jdbctype="clob" javatype="java.lang.string" /> </resultmap> <parametermap id="lobsampleparam" class="com.altibase.lob.lobsample"> <parameter property="lob_id" /> <parameter property="lobcolumn" jdbctype="clob" javatype="java.lang.string" /> </parametermap> <select id="getlobsample" parameterclass="int" resultmap="lobsampleresult"> SELECT lob_id, lobcolumn FROM lobsample WHERE lob_id = #value# </select> <insert id="insertlobsample" parametermap="lobsampleparam"> INSERT INTO lobsample (lob_id,lobcolumn) VALUES (?,?) </insert> </sqlmap> 또한 LOB 처리시반드시주의해야할사항은 ALTIBASE 에서 LOB 데이터를처리하기위해서는반드시 autocommit 모드를 false 로바꾼후트랜잭션을관리해줘야한다는것이다. ibatis 연동시 SqlMapConfig 파일의 <transactionmanager> 에 datasource 를설정할경우에는내부적으로 setautocommit(false); 메소드를호출하여 autocommit 모드를 false 로바꿔주기때문에 LOB 처리시따로고려할사항은없다. 하지만, ibatis 와 Spring 을함께연동할경우 Spring 에서트랜잭션을관리해준다면 LOB 을처리하기위해서는반드시 TransactionManager bean 을명시해줘야한다. ibatis 연동가이드 25 page of 36
또, Spring 에서선언적으로트랜잭션을처리하는경우에는 propagation 을 PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED 중하나로지정해줘야한다. 만약 TransactionManager 를지정해주지않았거나, 또는선언적트랜잭션을사용하는데 propagation 을위에설명한값이외의다른값으로지정했을경우에는 LOB 데이터조회시 null 값이리턴되거나, java.sql.sqlexception: [0]:LobLocator can not span the transaction 101858625. 과같은에러가발생한다. 그리고 LOB 데이터를입력시에도 java.sql.sqlexception: [0]:LobLocator can not span the transaction 101858625. 에러가발생하게된다. 다음의예제는 Spring 의 applicationcontext.xml 에서선언적으로트랜잭션을처리하여 LOB 데이터를처리하는예제이다. 선언적으로트랜잭션을처리하는방법에대한자세한설명은 ALTIBASE_Spring_ 연동가이드 문서를참고하면된다. 예 ) LobSpringIbatisSample 의 applicationcontext.xml 파일 <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="altibase.jdbc.driver.altibasedriver"/> <property name="url" value="jdbc:altibase://192.168.1.35:21129/mydb"/> <property name="username" value="sys"/> <property name="password" value="manager" /> </bean> <bean id="sqlmapclient" class="org.springframework.orm.ibatis.sqlmapclientfactorybean"> <property name="datasource" ref="datasource"/> <property name="configlocation" value="sqlmapconfigexample.xml"/> </bean> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource"/> </bean> <bean id="txproxytemplate" abstract="true" class="org.springframework.transaction.interceptor.transactionproxyfactorybean"> <property name="transactionmanager" ref="transactionmanager" /> <property name="transactionattributes"> <props> <prop key="insert*">propagation_required</prop> <prop key="update*">propagation_required</prop> <prop key="delete*">propagation_required</prop> <prop key="get*">propagation_required</prop> </props> </property> </bean> <bean id="lobsampledao" parent="txproxytemplate"> <property name="target"> <bean class="com.altibase.lob.lobsampledao"> <property name="sqlmapclient" ref="sqlmapclient"/> </bean> </property> </bean> ibatis 연동가이드 26 page of 36
위의 LobSpringIbatisSample 프로젝트를실행하기위해서는 Altibase.jar, ibatis- 2.3.4.x.jar 파일과 spring-jdbc.jar, spring-orm.jar, spring.jar, commons-logging.jar, cglibnodep-x.x.jar 파일이필요하다. ibatis 연동가이드 27 page of 36
부록 sampleconnection 예제를바탕으로 ibatis 에서 ALTIBASE 와연동하는방법에대해좀더자세하게설명한다. 단, IDE 는 Eclipse 를사용한다. DB 테이블및시퀀스생성 DB 에다음의테이블과시퀀스를생성한다. (create_tbl.sql 파일참고 ) CREATE TABLE PERSON( PER_ID NUMBER (5, 0) NOT NULL, PER_NAME VARCHAR (40) NOT NULL, PER_BIRTH_DATE DATE, PER_WEIGHT_KG NUMBER (4, 2) NOT NULL, PER_HEIGHT_M NUMBER (4, 2) NOT NULL, PRIMARY KEY (PER_ID) ); CREATE SEQUENCE PERSON_SEQ; 프로젝트생성 Eclipse에서 SimpleConnection 이라는프로젝트를생성한다. 1. 메뉴 File Java Project 클릭 2. Project name : 에 SimpleConnection 입력 3. Finish 버튼을클릭 ibatis 연동가이드 28 page of 36
SqlMap 파일작성 Person 테이블의 CRUD SQL 구문과 mapping 되는메소드들을정의한 SqlMap 파일을작성한다.(Person.xml) 1. SimpleConnection 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭하여 New File 을클릭한다. 2. File name: 에 Person.xml 을작성한다. 다음의내용을 Person.xml 파일에작성한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmap PUBLIC "-//ibatis.com//dtd SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-mapconfig-2.dtd"> <sqlmap namespace="person"> <resultmap id="personresult" class="examples.domain.person"> <result property="id" column="per_id" /> <result property="name" column="per_name" /> <result property="birthdate" column="per_birth_date" /> <result property="weightinkilograms" column="per_weight_kg" /> <result property="heightinmeters" column="per_height_m" /> </resultmap> <select id="getperson" parameterclass="int" resultclass="examples.domain.person"> <![CDATA[ SELECT PER_ID as id, PER_NAME as name, PER_BIRTH_DATE as birthdate, ibatis 연동가이드 29 page of 36
</select> ]]> PER_WEIGHT_KG as weightinkilograms, PER_HEIGHT_M as heightinmeters FROM PERSON WHERE PER_ID = #value# <insert id="insertperson" parameterclass="examples.domain.person"> <![CDATA[ INSERT INTO PERSON (PER_ID, PER_NAME, PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M) VALUES (#id#, #name#, #birthdate#, #weightinkilograms#, #heightinmeters#) ]]> </insert> <update id="updateperson" parameterclass="examples.domain.person"> <![CDATA[ UPDATE PERSON SET PER_NAME = #name#, PER_BIRTH_DATE = #birthdate#, PER_WEIGHT_KG = #weightinkilograms#, PER_HEIGHT_M = #heightinmeters# WHERE PER_ID = #id# ]]> </update> <delete id="deleteperson" parameterclass="int"> <![CDATA[ DELETE PERSON WHERE PER_ID = #id# ]]> </delete> <select id="getallpersons" resultmap="personresult"> <![CDATA[ SELECT * FROM person ]]> </select> </sqlmap> Application 에서 SqlMapClient 의 insert, update, delete, queryforxxx() 메소드를호출할때위의파일에정의되어있는 <insert>, <update>, <delete>, <select> 태그에정의되어있는 id 와일치하는 SQL 문들이자동으로수행이된다. SqlMapConfig 파일작성 1. ALTIBASE 연결을위한 property 들을정의한 properties 파일 (db.properties) 을작성한다. ( SimpleConnection 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭하여 New File 을클릭한다. File name: 에 db.properties 을작성한다.) driver=altibase.jdbc.driver.altibasedriver url=jdbc:altibase://192.168.1.35:21129/mydb username=sys password=manager ibatis 연동가이드 30 page of 36
2. SqlMapConfig 파일 (SqlMapConfigExample.xml) 에 ALTIBASE 와연동을위한 datasource 와 SqlMap 파일을설정한다. ( SimpleConnection 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭하여 New File 을클릭한다. File name: 에 SqlMapConfigExample.xml 을작성한다.) <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmapconfig PUBLIC "-//ibatis.com//dtd SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlmapconfig> <properties resource="db.properties" /> <transactionmanager type="jdbc" > <datasource type="simple"> <property name="jdbc.driver" value="${driver"/> <property name="jdbc.connectionurl" value="${url"/> <property name="jdbc.username" value="${username"/> <property name="jdbc.password" value="${password"/> </datasource> </transactionmanager> <sqlmap resource="person.xml" /> </sqlmapconfig> Application 작성 1. person 테이블에대한 DO 객체인 Person 클래스 (Person.java) 를작성한다. 1-1. SimpleConnection 프로젝트의 src 디렉토리에서마우스오른쪽버튼클릭하여 New Class 를클릭한다. 1-2. Package: 에 examples.domain 를입력하고 Name: 에 Person 를입력한다. ibatis 연동가이드 31 page of 36
다음의내용을 Person.java 파일에작성한다. package examples.domain; import java.sql.*; public class Person { private int id; private String name; private Date birthdate; private double weightinkilograms; private double heightinmeters; public int getid () { return id; public void setid (int id) { this.id = id; public void setname(string name) { this.name = name; public String getname() { return name; public void setbirthdate(date birthdate) { this.birthdate = birthdate; public Date getbirthdate() { return birthdate; public void setweightinkilograms(double weightinkilograms) { this.weightinkilograms = weightinkilograms; public double getweightinkilograms() { return weightinkilograms; ibatis 연동가이드 32 page of 36
public void setheightinmeters(double heightinmeters) { this.heightinmeters = heightinmeters; public double getheightinmeters() { return heightinmeters; public String tostring(){ return "id="+id+", name="+name+", birthdata="+birthdate+", weightinkillograms="+weightinkilograms+ ",heightinmeters="+heightinmeters; 2. DB 에 CRUD 를실행하는 main 프로그램 (PersonApp.java) 을작성한다. 2-1. SimpleConnection 프로젝트의 src 디렉토리에서마우스오른쪽버튼클릭하여 New Class 를클릭한다. 2-2. Name: 에 PersonApp 를입력한다. 다음의내용을 PersonApp.java 파일에작성한다. import java.io.ioexception; import java.io.reader; import java.sql.sqlexception; import java.util.list; import examples.domain.person; import com.ibatis.common.resources.resources; import com.ibatis.sqlmap.client.sqlmapclient; import com.ibatis.sqlmap.client.sqlmapclientbuilder; public class PersonApp { public static void main(string[] args) throws Exception { String resource ="SqlMapConfigExample.xml"; ibatis 연동가이드 33 page of 36
Reader reader = Resources.getResourceAsReader(resource); SqlMapClient sqlmap = SqlMapClientBuilder.buildSqlMapClient(reader); //insert Person Person newperson1 = new Person(); newperson1.setname("kim"); newperson1.setbirthdate (new java.sql.date(1978,1-1,1)); newperson1.setheightinmeters(1.82); newperson1.setweightinkilograms(80.23); sqlmap.insert ("insertperson", newperson1); Person newperson2 = new Person(); newperson2.setname("lee"); newperson2.setbirthdate (new java.sql.date(1975,5-1,5)); newperson2.setheightinmeters(1.57); newperson2.setweightinkilograms(45.23); sqlmap.insert ("insertperson", newperson2); System.out.println(); System.out.println("insert Person"); List<Person> list = (List<Person>)sqlMap.queryForList("getAllPersons"); System.out.println("Selected "+list.size()+" records."); for(int i=0; i< list.size();i++){ System.out.println(list.get(i)); //update Person newperson1.setheightinmeters(1.93); newperson1.setweightinkilograms(86.36); sqlmap.update("updateperson", newperson1); System.out.println(); System.out.println("update Person"); list = sqlmap.queryforlist("getallpersons"); System.out.println("Selected "+list.size()+" records."); for(int i=0; i< list.size();i++){ System.out.println(list.get(i).toString()); System.out.println(); System.out.println("get Person"); //get Person Integer personpk = new Integer(1); Person person = (Person) sqlmap.queryforobject ("getperson", personpk); System.out.println(person); //delete Person sqlmap.delete ("deleteperson", new Integer(1)); sqlmap.delete ("deleteperson", new Integer(2)); System.out.println(); System.out.println("delete Person"); list = sqlmap.queryforlist("getallpersons"); System.out.println("Selected "+list.size()+" records."); for(int i=0; i< list.size();i++){ System.out.println(list.get(i)); ibatis 연동가이드 34 page of 36
관련 JAR 파일추가 Altibase.jar 와 ibatis-2.3.4.x.jar 파일을추가한다. SimpleConnection 프로젝트에서마우스오른쪽버튼클릭하여 Properties 를클릭 Java Build Path Libraries 에서 Add External JARS 를클릭하여 Altibase.jar 와 ibatis- 2.3.4.x.jar 파일을추가한다. Application 실행 SimpleConnection 프로젝트를실행한다. SimpleConnection 프로젝트를클릭한후메뉴에서 Run 을실행하거나 Run 실행단추를클릭한다. ibatis 연동가이드 35 page of 36
알티베이스 서울특별시구로구구로 3 동 182-13 대륭포스트 2 차 1008 호 02-2082-1000 http://www.altibase.com 대전사무소대전광역시서구둔산동 921 주은리더스텔 901 호 042-489-0330 기술지원본부서울특별시구로구구로 3 동 182-13 대륭포스트 2 차 908 호 02-2082-1000 솔루션센터 02-2082-1114 http://support.altibase.com Copyright c 2000~2013 ALTIBASE Corporation. All Rights Reserved. 이문서는정보제공을목적으로제공되며, 사전에예고없이변경될수있습니다. 이문서는오류가있을수있으며, 상업적또는특정목적에부합하는명시적, 묵시적인책임이일체없습니다. 이문서에포함된 ALTIBASE 제품의특징이나기능의개발, 발표등의시기는 ALTIBASE 재량입니다. ALTIBASE 는이문서에대하여관련된특허권, 상표권, 저작권또는기타지적재산권을보유할수있습니다. ibatis 연동가이드 36 page of 36