ALTIBASE 사용자가이드 Templete

Similar documents
표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete

Spring Boot/JDBC JdbcTemplate/CRUD 예제

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

슬라이드 1

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

슬라이드 1

Interstage5 SOAP서비스 설정 가이드

쉽게 풀어쓴 C 프로그래밊

Spring Boot

슬라이드 1

JDBC 소개및설치 Database Laboratory

ALTIBASE 사용자가이드 Templete

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

ALTIBASE 사용자가이드 Templete

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

10.ppt

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

교육2 ? 그림

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Windows 8에서 BioStar 1 설치하기

MyBatis

ISP and CodeVisionAVR C Compiler.hwp

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence)

02 C h a p t e r Java

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

슬라이드 1

슬라이드 1

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Spring Data JPA Many To Many 양방향 관계 예제

표준프레임워크 Nexus 및 CI 환경구축가이드 Version 3.8 Page 1

JUNIT 실습및발표

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

PowerPoint Template

arcplan Enterprise 6 Charting Facelifts

rmi_박준용_final.PDF

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

Facebook API

FileMaker 15 ODBC 및 JDBC 설명서

Microsoft Word - src.doc

PowerPoint 프레젠테이션

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

DBMS & SQL Server Installation Database Laboratory

윈도우시스템프로그래밍

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - chap01-C언어개요.pptx

Secure Programming Lecture1 : Introduction

4S 1차년도 평가 발표자료

MasoJava4_Dongbin.PDF

내장서버로사용. spring-boot-starter-data-jpa : Spring Data JPA 사용을위한설정 spring-boot-devtools : 개발자도구를제공, 이도구는응용프로그램개발모드에서유 용한데코드가변경된경우서버를자동으로다시시작하는일들을한다. spri

단계

FileMaker ODBC and JDBC Guide

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - 10Àå.ppt

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

C++ Programming

제11장 프로세스와 쓰레드

교육자료

< 목차 > 1. Data Access Service 개요 (ibatis 활용 ) 3. DBIO 소개

PowerPoint Presentation

어댑터뷰

PowerPoint 프레젠테이션

FileMaker ODBC 및 JDBC 가이드

슬라이드 1

슬라이드 1

ALTIBASE HDB Patch Notes

Network Programming

07 자바의 다양한 클래스.key

Apache Ivy

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

JAVA 플랫폼 개발 환경 구축 및 활용

MyBatis

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

NTD36HD Manual

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Intro to Servlet, EJB, JSP, WS

단계

Spring

13주-14주proc.PDF

Remote UI Guide

JMF2_심빈구.PDF

슬라이드 1

Transcription:

Real Alternative DBMS ALTIBASE, Since 1999 MyBatis 연동가이드 2014. 10 Copyright c 2000~2014 ALTBASE Corporation. All Rights Reserved.

Document Control Change Record Date Author Change Reference 2013-12 sypark Created 2014-10 Dbpark Updated Reviews Date Name (Position) Distribution Name Location MyBATIS 연동가이드 2 page of 61

목차 개요... 5 MYBATIS 개요... 6 MyBATIS 란?... 6 MyBatis 다운로드... 7 MYBATIS 와 IBATIS 와의차이점... 8 Java 요구버전... 8 Package 내부구조의변경... 8 SqlMap.xml 내부구조의변경... 8 사용용어의변경... 8 네임스페이스방식의변경... 8 MYBATIS 를이용한 SAMPLE 작성... 9 Mapper 파일작성... 9 Configuration 파일작성... 10 Application 작성... 11 ALTIBASE 연동... 13 ALTIBASE JDBC Driver 얻는방법... 13 JDBC Driver 에설정하는방법... 14 Configuration 파일에 datasource 를설정하여 ALTIBASE 와연동... 15 FailOver 를이용한 Connection... 16 ALTIBASE5 와이전버전을동시에 Connection... 17 Procedure 호출... 20 Function 호출... 21 MYBATIS, SPRING, ALTIBASE 연동... 23 Spring 에 MyBatis 를연동하여 datasource 를설정... 23 Connection Pool 설정방법... 25 트랜잭션관리... 26 MyBatis 에서트랜잭션관리... 26 MYBATIS 연동시고려사항... 28 LOB 데이터처리... 28 Insert 시 insert query 가중복되어보내지는현상... 30 부록 (MYBATIS-ALTIBASE 연동 )... 31 DB 테이블및시퀀스생성... 31 프로젝트생성... 31 패키지명명규칙... 32 Configuration 파일작성... 32 Mapper 파일작성... 33 Application 작성... 35 관련 JAR 파일추가... 41 Application 실행... 42 부록 2(SPRING-MYBATIS-ALTIBASE 연동 )... 43 DB 테이블및시퀀스생성... 43 Spring 설치... 43 Maven 설치... 44 프로젝트생성... 46 패키지명명규칙... 47 ApplicationContext 파일작성... 47 MyBATIS 연동가이드 3 page of 61

Mapper 파일작성... 49 Dependency Injection... 51 Application 작성... 51 관련 JAR 파일추가... 57 Application 실행... 60 MyBATIS 연동가이드 4 page of 61

개요 본문서는 mybatis 환경, ibatis와의차이점, mybatis에서 ALTIBASE와연동하는방법에대해기술한다. mybatis 3.2.8, ALTIBASE는 6.3.1 버전, 개발 IDE로는 Eclipse, Maven을사용하였으며 chapter 와는별도로예제가제공된다. 본문서와더불어개발시참고해야할문서들은다음과같다. 1. ALTIBASE 개발가이드 2. JAVA 개발가이드 3. ALTIBASE_JBOSS 연동가이드 4. ALTIBASE_TOMCAT 연동가이드 5. ALTIBASE_WEBSPHERE 연동가이드 6. ALTIBASE_WEBLOGIC 연동가이드 7. ALTIBASE_Spring 연동가이드 8. ALTIBASE_HIBERNATE 연동가이드 9. ALTIBASE_iBatis 연동가이드 MyBATIS 연동가이드 5 page of 61

MyBatis 개요 본장에서는 MyBatis 의개념과특징, 다운로드및사용방법에대해살펴본다. MyBATIS 란? MyBatis 는개발자가지정한 SQL, 저장프로시저그리고몇가지고급매핑을지원하는퍼시스턴스프레임워크이다. MyBatis 는 JDBC 코드와수동으로셋팅하는파라미터와결과매핑을제거한다. MyBatis 는데이터베이스레코드에원시타입과 Map 인터페이스그리고자바 POJO 를설정하고매핑하기위해 XML 과애노테이션을사용할수있다. 기존의 JDBC 를이용하여프로그래밍하는방식은프로그램소스안에 SQL 문을작성하였지만, MyBatis 를이용하면 SQL 문을프로그램에서분리하여 XML 파일에별도로작성한다. 따라서프로그래머가기존의 JDBC 를사용할때보다프로그래밍하는부담이줄어들게된다. 뿐만아니라 SQL 을변경하고자할경우기존처럼프로그램을수정하는것이아니라 XML 파일의 SQL 문만을변경하면되기때문에 SQL 변환이자유롭다는특징이있다. 다음은 MyBatis 의구조를간단하게표현한그림이다. Configuration 파일 (SqlMapConfig.xml) : DB 설정과트랜잭션등 Mybatis 가동작하는규칙을정의. 매퍼 (Mapper) : SQL 을 XML 에정의한매퍼 XML 파일과 SQL 을인터페이스의메소드마다애노테이션으로정의한매퍼인터페이스를의미. MyBATIS 연동가이드 6 page of 61

매핑구문 (Mapped Statements) : 조회결과를자바객체에설정하는규칙을나타내는결과매핑과 SQL 을 XML 에정의한매핑구문을의미. 매핑구문을정의하는방법은애노테이션과 XML 방식두가지가존재함. 사용자는 CRUD 에대한각각의 SQL 문은 SqlMap XML 파일에작성하고이파일들을 SqlMapConfig XML 파일에작성하면 MyBatis API 를통해자동으로 Mapping 된 Statement 객체들을생성하여이를통해 DB 에 SQL 문을실행하게된다. MyBatis 는현재구글이인수하였으며홈페이지주소는다음과같다. http://blog.mybatis.org/ http://mybatis.github.io/mybatis-3/ -> MyBatis 에대한다양한레퍼런스를제공하며한글번역페이지도존재하고있다.( http://mybatis.github.io/mybatis-3/ko/) MyBatis 다운로드 MyBatis 를사용하기위해서 Mybatis 관련 jar 파일이필요하다. 이 jar 파일은 http://repo1.maven.org/maven2/org/mybatis/mybatis/3.2.8/ 페이지에서다운로드받을수있다. mybatis-3.2.8.jar 를받아 eclipse 에서추가해주면되며 Maven 을사용한다면다음의구문을 pom.xml 에추가해주면된다. <dependency> </dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.2.8</version> Maven 을통하여 Library 를추가하는방법은부록 2 에서상세히설명한다. MyBATIS 연동가이드 7 page of 61

MyBatis 와 ibatis 와의차이점 ibatis 가 MyBatis 로변경되면서버전만변경된것으로생각했었으나 (ibatis : ~ 2.3 MyBatis : 2.5 ~) 확인해보니변경점이많아져서따로페이지에기술하게되었다. Java 요구버전 ibatis 에서는 JDK 1.4 이상에서사용이가능하였으나, MyBatis 에서는 JDK 1.5 이상을요구한다.(MyBatis 3.2 이상버전은 JDK 1.6 이상을요구한다.) Package 내부구조의변경 ibatis : com.ibatis.* MyBatis : org.apache.ibatis.*( 이름은변경되었지만내부적으로는여전히 ibatis 를사용하고있다.) SqlMap.xml 내부구조의변경 가장큰변경점은 parametermap 이 Deprecated 된점이라고할수있다. parametermap 을사용하지못하게되며기존 parametermap 을사용하던부분은아래와같이 parametertype 에정의하게되었다. ex) <insert id="insertblobdata" parametertype="lobvo"> insert into test_blob(user_no, user_name, blob_data, clob_data, reg_date) values(#{userno, #{username, #{blobdata,jdbctype=blob, #{clobdata,jdbctype=clob, #{regdate) </insert> 사용용어의변경 SqlMapConfig -> Configuration sqlmap -> mapper 로변경됨. 네임스페이스방식의변경 sqlmap 별로줄여놓은이름을사용할수없게되며경로를모두명시해주어야함. 또한 ibatis에서는 namespace가선택이었지만 MyBatis는필수항목이다. Ex) ibatis : <sqlmap namespace="lob"> MyBatis : <mapper namespace="com.altibase.sample.mapper.lobmapper"> MyBATIS 연동가이드 8 page of 61

MyBatis 를이용한 sample 작성 MyBatis 를이용하여 SQL 문을처리하기위해서는 Configuration XML 파일과 Mapper XML 파일을작성해야한다. 이파일들은프로그래머에게 JavaBean 을 PreparedStatement 의파라미터와 ResultSet 으로쉽게 mapping 할수있도록해준다. 본장에서는 Configuration XML 파일, Mapper XML 파일을작성하는방법과 application 에서이파일을이용하여실제로 SQL 을처리하는방법에대해설명한다. Sample 프로그램을작성하는보다자세한내용은부록부분을참고하면된다. Mapper 파일작성 Mapper XML 파일은 DB 로전송할 SQL 구문, PreparedStatement 로 binding 될 parameter 의 mapping, ResultSet 의 result 의 mapping 들을명시하는파일이다. 다음은 person 테이블에 CRUD 를처리하는 Mapper XML 파일을작성한예제이다. (UserMapper.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="com.altibase.sidu.mapper.usermapper"> <select id="selectuserdata" parametertype="integer" resulttype="user"> SELECT user_no as userno, user_name as username, user_content as usercontent, reg_date as regdate FROM users WHERE user_no = #{userno </select> <select id="selectalluserdata" resulttype="user"> SELECT user_no as userno, user_name as username, user_content as usercontent, reg_date as regdate FROM users </select> <insert id="insertuserdata" parametertype="user"> insert into users(user_no, user_name, user_content, reg_date) values(#{userno, #{username, #{usercontent, #{regdate) </insert> <update id="updateuserdata" parametertype="user"> update users set user_name = #{username, user_content = #{usercontent, reg_date = #{regdate where user_no = #{userno </update> <delete id="deleteuserdata" parametertype="user"> delete from users where user_no = #{userno </delete> MyBATIS 연동가이드 9 page of 61

</mapper> <insert>, <update>, <delete>, <select> 태그에는 CRUD 의작업에대한각각의 SQL 문을정의한다. 각각의태그에대한보다자세한설명은 http://mybatis.github.io/mybatis-3/ko/ 사이트를참고하거나첨부된문서 MyBatis-3-User-Guide_ko.pdf 파일을참고하면된다. Configuration 파일작성 Configuration 파일은 DB 연결을위한 datasource, Mapper 파일의경로, typealiases 의설정외 SqlMapClient 를제어할 property 들을작성하는 SQL Maps 설정파일이다. 다음은 Configuration 파일 (mybatis-config.xml) 예제이다. <?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="db.properties" /> <typealiases> <typealias type="com.altibase.sidu.model.uservo" alias="user" /> </typealiases> <!-- DB 연결옵션 : UNPOOLED/POOLED/JNDI --> <!-- transanctionmanager 옵션 : JDBC/MANAGED --> <environments default="development"> <environment id="development"> <transactionmanager type="jdbc" /> <datasource type="pooled"> <property name="driver" value="${jdbc.driver" /> <property name="url" value="${jdbc.url" /> <property name="username" value="${jdbc.username" /> <property name="password" value="${jdbc.password" /> <property name="poolpingquery" value="select 1 from dual"/> <property name="poolmaximumactiveconnections" value="100"/> <property name="poolmaximumidleconnections" value="50"/> <property name="poolmaximumcheckouttime" value="20000"/> </datasource> </environment> </environments> <mappers> <mapper resource="com/altibase/sidu/mapper/usermapper.xml" /> </mappers> </configuration> <properties> 태그에는 name=value 형태로정의된 property 들을작성한 properties 파일의경로및이름을명시해주고, <settings> 태그에는 Configuration 을제어할 property 들을, <transactionmanager> 와 <datasource> 에는연결할 DB 정보를작성한다. 또, <mappers> 태그에는미리작성한 Mapper 파일들의경로및이름을작성한다. MyBATIS 연동가이드 10 page of 61

다만이전 ibatis 와다른점은 ibatis 에서 DB 설정을한개만할수있었던것에비해서 MyBatis 는설정파일에여러개의 DB 를설정하고 SqlSessionFactory 객체를생성하는시점에서특정 DB 를설정할수있다. 각각의태그에대한보다자세한설명은 http://mybatis.github.io/mybatis-3/ko/ 사이트를참고하거나첨부된문서 MyBatis-3-User-Guide_ko.pdf 파일을참고하면된다. Application 작성 Application 에서 MyBatis 에서제공하는 SqlSession 객체의 instance 를이용하여 DB 테이블에 Mapping 된객체와연동하여 CRUD 작업을처리할수있다. MyBatis 를이용하여 DB 와연동하기위해서는먼저 DB 연결에대한설정이있는 Configuration 파일을읽어 SqlSessionFactory 객체를생성하고해당객체에서 SqlSession 객체를얻어 Mapper 에매핑되는쿼리를처리하게된다. 다음은 DB 의 users 테이블에데이터를삽입, 변경, 삭제, 조회하는 application 이다. Application 에서연결을얻어오는부분은별도의 Class 로분류하였다. 예 ) altibase_mybatis_sidu 의 SiduMain.java // Configuration DB Connection MybatisUtil.java inputstream = Resources.getResourceAsStream("mybatis-config.xml"); sqlsessionfactory = new SqlSessionFactoryBuilder().build(inputStream); sqlsession = sqlsessionfactory.opensession(false); UserVo uservo = new UserVo(); //select User String statement = "com.altibase.sidu.mapper.usermapper.selectuserdata"; uservo = MybatisUtil.getSqlSessionFactory().selectOne(statement, user_no); // select all User List<UserVo> uservos = MybatisUtil.getSqlSessionFactory().selectList(statement); // update User String statement = "com.altibase.sidu.mapper.usermapper.updateuserdata"; res_count = MybatisUtil.getSqlSessionFactory().update(statement, uservo); // insert User String statement = "com.altibase.sidu.mapper.usermapper.insertuserdata"; res_count = MybatisUtil.getSqlSessionFactory().insert(statement, uservo); // delete User String statement = "com.altibase.sidu.mapper.usermapper.deleteuserdata"; res_count = MybatisUtil.getSqlSessionFactory().insert(statement, user_no); MyBATIS 연동가이드 11 page of 61

먼저 Mapper 파일을읽어들여 SqlSessionFactory 객체를생성하며생성된 SqlSessionFactory 객체에서 SqlSession 객체를생성하며, Sample 에서 SqlSession 을가져온메소드는다음과같다. sqlsessionfactory.opensession(boolean arg0); ) 해당메소드의 Boolean 인자는 autocommit 모드를결정하는값이다.( inputstream = Resources.getResourceAsStream("mybatis-config.xml"); sqlsessionfactory = new SqlSessionFactoryBuilder().build(inputStream); sqlsession = sqlsessionfactory.opensession(false); 이후 SqlSession 객체와 Mapper 에명명되어있는 id 를가지고 CRUD 클래스의각각의메소드를호출한다. ( String statement = "com.altibase.sidu.mapper.usermapper.updateuserdata"; sqlsession.update(statement, update);) 각각의태그에대한보다자세한설명은 http://mybatis.github.io/mybatis-3/ko/ 사이트를참고하거나첨부된문서 MyBatis-3-User-Guide_ko.pdf 파일을참고하면된다. MyBATIS 연동가이드 12 page of 61

ALTIBASE 연동 MyBatis 에서 ALTIBASE 를연동하는위해서는 ALTIBASE JDBC Driver 를 setting 하고 Configuration 파일에 ALTIBASE 를위한 datasource 를지정하면된다. 본장에서는 ALTIBASE JDBC Driver 를얻는방법, JDBC Driver 를설정하는방법, Configuration 에 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 : Altibase Ver = 6.3.1.2.6 for JavaVM v1.4, CMP:7.1.1, Oct 6 2014 13:54:56 이때, ALTIBASE DB Server 의 cm protocol version 과 ALTIBASE JDBC Driver 의 CMP 가동일하면호환가능하다. $ altibase -v version 6.3.1.2.7 X86_64_LINUX_redhat_Enterprise_ES4-64bit-6.3.1.2.7-release-GCC3.4.6 (x86_64-unknown-linux-gnu) Oct 8 2014 09:16:24, binary db version 6.2.1, meta version 6.3.1, cm protocol version 7.1.1, replication protocol version 7.4.1 버전이 UP 되면서 JDBC 관련버그가 fix 되었을가능성이있으므로, 일반적으로 ALTIBASE DB Server 의버전과같거나이보다더최신의 ALTIBASE JDBC Driver 파일을사용하는것을권장한다. MyBATIS 연동가이드 13 page of 61

JDBC Driver 에설정하는방법 다운로드받은 JDBC Driver 인 Altibase.jar 파일은 classpath 에추가하거나웹서버의적절한디렉토리에위치시킨다. 만약, Eclipse 를사용하여개발한다면다음과같이해당프로젝트에 ALTIBASE JDBC Driver 를추가할수있다. 프로젝트 Properties Java Build Path 메뉴로이동하여 Add External JARS 메뉴를통해라이브러리를등록한다. MyBATIS 연동가이드 14 page of 61

Configuration 파일에 datasource 를설정하여 ALTIBASE 와연동 Configuration 파일의 <configuration> 태그에 ALTIBASE 용 property 를지정하여 ALTIBASE 와연결하면된다. 이때 Configuration 파일에직접 property 값을입력할수있고, 또는별도의 properties 파일을작성하여이파일에작성된 property 값을로딩하여사용할수도있다. 다음은 db.properties 라는 properties 파일에 ALTIBASE 에대한 property 들을정의하고, 이 property 들을읽어와 Configuration 파일에서사용하는예제이다. 예 ) altibase_mybatis_sidu 의 db.properties 파일 jdbc.driver=altibase.jdbc.driver.altibasedriver jdbc.url=jdbc:altibase://192.168.1.35:36492/mydb jdbc.username=sys jdbc.password=manager 이파일에설정된각각의값의의미는다음과같다. Property 설명 driver url username password ALTIBASE JDBC driver class Name ALTIBASE 와연결을위한 Connection string 정보 jdbc:altibase://ip:port_no/db_name 형태로기입 데이터베이스계정 데이터베이스패스워드 예 ) altibase_mybatis_sidu 의 mybatis-config.xml 파일 <configuration> <properties resource="db.properties" /> <typealiases> <typealias type="com.altibase.sidu.model.uservo" alias="user" /> </typealiases> <!-- DB 연결옵션 : UNPOOLED/POOLED/JNDI --> <!-- transanctionmanager 옵션 : JDBC/MANAGED --> <environments default="development"> <environment id="development"> <transactionmanager type="jdbc" /> <datasource type="pooled"> <property name="driver" value="${jdbc.driver" /> <property name="url" value="${jdbc.url" /> <property name="username" value="${jdbc.username" /> <property name="password" value="${jdbc.password" /> <property name="poolpingquery" value="select 1 from dual"/> <property name="poolmaximumactiveconnections" value="100"/> <property name="poolmaximumidleconnections" value="50"/> <property name="poolmaximumcheckouttime" value="20000"/> </datasource> </environment> </environments> <mappers> <mapper resource="com/altibase/sidu/mapper/usermapper.xml" /> </mappers> </configuration> MyBATIS 연동가이드 15 page of 61

db.properties 에지정한 driver, url, username, password property 들을읽어와 datasource 의 JDBC.Driver, JDBC.ConnectionURL, JDBC.Username, JDBC.password property 에 setting 하고있다. 위의예제 SimpleConnection 프로젝트를실행하기위해서는 Altibase.jar, mybatis- 3.2.8.jar 파일이필요하다. 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&Healthcheckduration=10& Failover_source=MESSAGE& username=sys password=manager 위의파일에지정한 Connection url 부분에정의할수있는 FailOver 관련 property 는다음과같다. Property AlternateServer ConnectionRetryCount 설명 장애발생시접속하게될가용서버를나타내며 (IP Address1:Port1, IP Address2:Port2,...) 형식으로기술한다. 가용서버접속실패시, 접속시도반복횟수 MyBATIS 연동가이드 16 page of 61

Property ConnectionRetryDelay LoadBalance SessionFailOver 설명 가용서버접속실패시, 다시접속을시도하기전에대기하는시간 ( 초단위 ) on 으로설정하면최초접속시도시에기본서버와가용서버를포함하여랜덤으로선택한다. off 로설정하면최초접속시도시에기본서버에접속하고, 접속에실패하면 AlternateServer 로기술한서버에접속한다. STF(Service Time Fail-Over) 를할것인지여부를나타낸다. on : STF, off : CTF CTF(Connection Time Fail-Over) 는 DBMS 접속시점에장애를인식하여다른정상서버로접속을재시도하는것을의미한다. Healthcheckduration Failover_source STF(Service Time Fail-Over) 는서비스하는도중에장애를감지하여다른가용노드의 DBMS 에다시접속하여세션의프로퍼티를복구한후사용자응용프로그램의업무로직을다시수행할수있도록하는것을의미한다. (STF 는 DB 접속에대해서만 Fail-Over 를수행해주는것이며실패한트랜잭션에대해서는사용자에의해재처리되어야한다 ) Failover가발생한서버가다시 AlternativeServer 목록으로재설정되기위한대기시간을지정한다. 서버에 Connection Failover가발생하면, 해당서버는 AlternativeServer의목록에서제거된다. 그리고삭제된서버는특정시간이지난후에다시 AlternativeServer 목록에추가되는데, 그시간을결정하는프로퍼티가 HealthCheckDuration이다. 단위는초 (second) 이다. Failover를수행할때, 서버에전달하는 Failover source에대한설명을지정한다. 이정보는 V$SESSION 성능뷰의 FAILOVER_SOURCE 칼럼에저장된다. 위의예제 FailOverSample 프로젝트를실행하기위해서는 Configuration 파일에 datasource 를설정하여 ALTIBASE 와연동 과마찬가지로 Altibase.jar, ibatis-2.3.4.x.jar 파일이필요하다. ALTIBASE5 와이전버전을동시에 Connection ALTIBASE 5 부터는하나의어플리케이션에서 ALTIBASE 6 와 ALTIBASE 5 혹은 ALTIBASE 4 와동시에연결할수있도록 ALTIBASE 5 버전전용의 JDBC Driver(Altibase5.jar) 를제공한다. 이 Driver 를이용하면 ALTIBASE 6 ALTIBASE 5, 혹은 ALTIBASE 6 ALTIBASE 4, ALTIBASE 5.1.5 ALTIBASE 5.3.3 간두버전의 ALTIBASE 에접속이가능하다. 기존의 Altibase.jar 와구별하기위해별도로 ALTIBASE 5 전용의 Altibase5.jar 가필요하다. 또한 datasource 에지정해주는부분에 JDBC Driver 클래스이름도기존의 MyBATIS 연동가이드 17 page of 61

Altibase.jdbc.driver.AltibaseDriver 대신 ALTIBASE 5 전용의 Altibase5.jdbc.driver.AltibaseDriver 를지정해야한다. MyBatis 에다른버전의 ALTIBASE 와연동하기위해서는각버전에해당하는 <environment> 태그를작성하여 Application 에서 <environment> 의 id 를통해 DB 연결시각각의설정을읽어드리면된다. 이때주의할점은프로그램에서 Altibase5.jdbc.driver.AltibaseDriver 를먼저로딩한후에 Altibase.jdbc.driver.AltibaseDriver 를로딩해야한다는것이다. 다음은 Altibase.jar 와 Altibase5.jar 파일을이용하여두버전의 ALTIBASE 의드라이버를로딩하는예제이다. 예 ) altibase_mybatis_multiversionconnection 의 db.properties 파일 ALTIBASE 6 버전에대한설정 # Altibase jdbc.driver=altibase.jdbc.driver.altibasedriver jdbc.url=jdbc:altibase://192.168.1.62:21020/mydb jdbc.username=test jdbc.password=test 예 ) altibase_mybatis_multiversionconnection 의 db.properties 파일 ALTIBASE 6 이전버전에대한설정 # Altibase 5 jdbc5.driver=altibase5.jdbc.driver.altibasedriver jdbc5.url=jdbc:altibase://192.168.1.147:21020/mydb jdbc5.username=test jdbc5.password=test 예 ) altibase_mybatis_multiversionconnection 의 mybatis-config.xml 파일 ALTIBASE 6 버전에대한설정 <environment id="release"> <transactionmanager type="jdbc" /> <datasource type="pooled"> <property name="driver" value="${jdbc.driver" /> <property name="url" value="${jdbc.url" /> <property name="username" value="${jdbc.username" /> <property name="password" value="${jdbc.password" /> <property name="poolpingquery" value="select 1 from dual"/> <property name="poolmaximumactiveconnections" value="100"/> <property name="poolmaximumidleconnections" value="50"/> <property name="poolmaximumcheckouttime" value="20000"/> </datasource> </environment> ALTIBASE 6 이전버전에대한설정 <environment id="development"> <transactionmanager type="jdbc" /> <datasource type="pooled"> <property name="driver" value="${jdbc5.driver" /> <property name="url" value="${jdbc5.url" /> <property name="username" value="${jdbc5.username" /> <property name="password" value="${jdbc5.password" /> MyBATIS 연동가이드 18 page of 61

<property name="poolpingquery" value="select 1 from dual"/> <property name="poolmaximumactiveconnections" value="100"/> <property name="poolmaximumidleconnections" value="50"/> <property name="poolmaximumcheckouttime" value="20000"/> </datasource> </environment> 예 ) altibase_mybatis_multiversionconnection 의 MultiVersionConnectionMain.java 파일 MultiVersionConnectionSelect multi_connection_select = new MultiVersionConnectionSelect(); System.out.println("DB Version = " + multi_connection_select.multiversionconnectiondbversionselect("release")); System.out.println("DB Version = " + multi_connection_select.multiversionconnectiondbversionselect("development")); altibase_mybatis_multiversionconnection 의 MultiVersionConnectionSelect.java (public String MultiVersionConnectionDBVersionSelect(String conn_type)) String statement = "com.altibase.multiversionconnection.mapper.usermapper.selectdbversion"; res_string = MybatisUtil.getSqlSessionFactory(conn_type).selectOne(statement); 위의 MultiVersionConnectionMain.java.java 예제를보면 Altibase5.jdbc.driver.AltibaseDriver 를 Altibase.jdbc.driver.AltibaseDriver 보다먼저로딩하기위해 ALTIBASE 5 버전 driver 의 <environment> 태그의 id 인 release 를인자값으로설정하고있다. 위에서도기술하였듯이 Altibase5.jdbc.driver.AltibaseDriver 드라이버를먼저로딩해야한다. 예제에포함된 MultiVersionConnection 프로젝트를실행하기위해서는기존에사용했던 mybatis.3.2.8.jar 파일뿐만아니라, Altibase.jar 와 Altibase5.jar 파일이더필요하다. 이파일들은 ALTIBASE 가설치된디렉토리 ($ALTIBASE_HOME) 의 lib 디렉토리안에존재하는데 ALTIBASE 5 버전의 Altibase5.jar 파일, 그이전버전의 Altibase.jar 파일을사용하면된다. - ALTIBASE 6.3.1 jar : Altibase.jar - ALTIBASE 5.x.x.jar : Altibase5.jar MyBATIS 연동가이드 19 page of 61

Procedure 호출 mybatis 에서 DB 에생성한 Stored Procedure 을호출할경우에는기본적인 DML 동작과같이 Configuration 파일에설정해주면되며다음의항목을아래와같은점에주의하여사용하여야한다. - 기존 ibatis 에서사용하던 <procedure> 태그가사라지고 statementtype 으로만판단하므로 Procedure/Function 사용시에는 statementtype 을필히 CALLABLE 로설정해야함. - 기존 ibatis 에서사용하던 <parametermap> 을사용할수없다. 다음은 Stored Procedure 의 Select 하는예제이다. 예 ) altibase_mybatis_procedure 의 Procedure 생성구문 CREATE OR REPLACE PROCEDURE PROC_SEL_TEST(usr_no IN INTEGER, res_user OUT TEST_TYPE.TEST_CUR) as SQL_STMT VARCHAR(200); BEGIN SQL_STMT :='SELECT user_no as userno, user_name as username, user_content as usercontent, reg_date as regdate FROM users WHERE user_no =?'; OPEN res_user FOR SQL_STMT USING usr_no; END; / CREATE or replace TYPESET TEST_TYPE AS TYPE TEST_CUR IS REF CURSOR; MyBATIS 연동가이드 20 page of 61

END; / 예 ) altibase_mybatis_procedure 의 UserMapper.xml(Mapper) 파일 <select id="testselectproc" statementtype="callable" parametertype="integer" resulttype="user"> { call PROC_SEL_TEST( #{userno,mode=in,jdbctype=integer,javatype=integer ) </select> <select> 태그에 statementtype 의속성을 CALLABLE 로지정하여해당요청이 Procedure/Function 이라는것을명시하고호출하는 Procedure/Function 의 IN 파라미터에대한설정을정의하며 resulttype 에 Bean 클래스를지정함으로써해당 procedure 에대한결과를 Bean 클래스로받아오게된다. 이때 Bean 클래스의컬럼과 DB 서 select 하는컬럼명을동일하게맞춰줘야 Bean 클래스에결과가리턴된다. altibase_mybatis_procedure 예제를실행하기위해서는 Configuration 파일에 datasource 를설정하여 ALTIBASE 와연동 과마찬가지로 Altibase.jar, mybatis.3.2.8.jar 파일이필요하다. Function 호출 mybatis 에서 DB 에생성한 Function 을호출할경우에는기본적인 DML 동작과같이 Configuration 파일에설정해주면되며다음의항목을아래와같은점에주의하여사용하여야한다. - 기존 ibatis 에서사용하던 <procedure> 태그가사라지고 statementtype 으로만판단하므로 Procedure/Function 사용시에는 statementtype 을필히 CALLABLE 로설정해야함. - 기존 ibatis 에서사용하던 <parametermap> 을사용할수없다. 다음은단순한덧셈결과를리턴하는 Stored Function 처리예제이며기본적인것은 Stored Procedure 와동일하지만에서호출하는부분이약간달라따로기술하게되었다. 예 ) altibase_mybatis_procedure 의 Function 생성구문 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; / 예 ) altibase_mybatis_procedure 의 UserMapper.xml(Mapper) 파일 MyBATIS 연동가이드 21 page of 61

<select id="testselectfunc" statementtype="callable" parametertype="map" resulttype="integer"> { call #{resnum,mode=out,jdbctype=integer,javatype=integer := SUM_FUNC( #{Num1,mode=IN,jdbcType=INTEGER,javaType=INTEGER, #{Num2,mode=IN,jdbcType=INTEGER,javaType=INTEGER ) </select> 기본적인설정법은 Stored Procedure 방법과동일하지만 Mapper 에서 Function 을호출하는형식이다르다. Stored Procedure 의호출과의차이점은다음과같다. Procedure : call PROC_SEL_TEST(#{IN); Function : call #{OUT := SUM_FUNC(#{IN) Function 을 Mapper 에서호출시에위와같은형식을지켜야정상적인 Function Call 이가능하다. altibase_mybatis_procedure 예제를실행하기위해서는 Configuration 파일에 datasource 를설정하여 ALTIBASE 와연동 과마찬가지로 Altibase.jar, mybatis.3.2.8.jar 파일이필요하다. MyBATIS 연동가이드 22 page of 61

MyBatis, Spring, ALTIBASE 연동 MyBatis, Spring 을 ALTIBASE 와연동하기위해서는 Spring 에 MyBatis 모듈을이용하여 datasource 를정의하고 ATLIBASE 와연동해야한다. 본장은 Spring 에 MyBatis 모듈을이용하여 ALTIBASE 와연결하는방법을설명한다. Spring 에 MyBatis 를연동하여 datasource 를설정 Spring 과 MyBatis 를함께사용하여 ALTIBASE 를사용하기위해서는 Spring 의설정파일 (applicationcontext.xml) 에다음의내역을설정한다. - MyBatis 모듈을이용한 SqlSessionFactory bean - 트랜잭션에대한설정인 transactionmanager - DB 에대한 datasource - Mapper Bean 설정 연동작업을수행하려면 Mybatis 와 Spring 연동관련모듈이필요하며모듈의이름은다음과같다. - mybatis-spring-1.x.x.jar mybatis-spring 연동모듈을사용하려면자바 1.5 이상의버전이필요하고 MyBatis 와 Spring 은각각 Version 별로조금씩다르다. 세부정보는아래의표를참고하기바란다. MyBatis Spring 연동모듈 Mybatis Spring 1.0.0 그리고 1.0.1 3.0.1 에서 3.0.5 까지 3.0.0 또는그이상 1.0.2 3.0.6 3.0.0 또는그이상 1.1.0 또는그이상 3.1.0 또는그이상 3.0.0 또는그이상 MyBatis 와 Spring 을함께사용하기위해서는 Spring 의 ApplicationContext.xml 파일에 MyBatis 의 SqlSessionFactory bean 및 Mapper bean 을지정해주면된다. Mapper bean 은실제쿼리를처리하는메소드를정의한 bean 으로 Spring 의처리방식인 Interface 를통하여처리하게된다. MyBatis, Spring 을연동한환경에서 Spring 에 datasource 를설정하는방법은 ALTIBASE_Spring_ 연동가이드 문서에서설명한방법들중하나를선택하여 SqlSessionFactory bean 및 TransactionManager bean 의 datasource property 에설정한 DB 의 datasource 명을기술하면된다. 다음은 applicationcontext.xml 파일에서 datasource 와 SqlSessionFactory bean, TransactionManager bean 을지정해주는예제이다. 예 ) altibase_mybatis_spring 의 ApplicationContext.xml 파일 MyBATIS 연동가이드 23 page of 61

<!-- DriverManagerDataSource 클래스를이용한데이터소스설정 --> <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:36492/mydb" /> <property name="username" value="sys" /> <property name="password" value="manager" /> </bean> <!--TransactionManager bean 설정 --> <bean id= TransactionManager " class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource" /> </bean> <!-- SqlSessionFactory bean 설정 --> <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="datasource" ref="datasource" /> <property name="typealiasespackage" value="com.altibase.test.domain" /> </bean> 해당예제는 Spring Template Project 를기반으로 Maven 을사용하여작성하였다. 실제사용자가추가하는 library 는 DB 접속라이브러리 (Altibase.jar), Mybatis 관련라이브러리 (mybatis-3.2.8.jar), Mybatis-Spring 연동라이브러리 (Mybatisspring.1.2.1.jar) 만필요하며 Spring 관련라이브러리는 Maven 을이용하여처리한다.(Spring Template Project 에서 Spring MVC Project 를통해작성하였으며해당모드로작성시생성되는 pom.xml 파일에 dependency 태그를이용하여자동으로 Library 를 import 한다. 자세한내용은부록에명시한다.) MyBATIS 연동가이드 24 page of 61

Connection Pool 설정방법 Spring-Mybatis 가연동됨에따라 datasource 를설정하는부분이독립적으로설정이가능하게된다. Spring 연동없이 Mybatis 에서만다른모듈의 Connection Pool 를사용할수없으며 Spring 과연동을해야다른모듈의 Connection Pool 를사용할수있다는것을주의해야한다. 아래내역은 Connection Pool 을설정하는예제이다. 예 ) altibase_mybatis_spring 의 applicationcontext.xml 파일... <! Altibase Connection Pool--> <bean id="datasource" class="altibase.jdbc.driver.altibaseconnectionpooldatasource"> <property name="url" value="jdbc:altibase://192.168.1.62:21020/mydb" /> <property name="user" value="test" /> <property name="password" value="test" /> </bean>... <! Apache Connection Pool--> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="altibase.jdbc.driver.altibasedriver" /> <property name="url" value="jdbc:altibase://192.168.1.35:36492/mydb" /> <property name="username" value="sys" /> <property name="password" value="manager" /> <property name="initialsize" value="10" /> <property name="minidle" value="25" /> <property name="maxidle" value="30" /> <property name="maxactive" value="100" /> <property name="validationquery" value="select 1 from dual" /> </bean> MyBATIS 연동가이드 25 page of 61

트랜잭션관리 MyBatis 에서 DB 와연동할경우 Configuration 파일의 <environments> 의 DB 별 <environment> 태그의 <transactionmanager> 에 datasource 를지정하고 <environment> 의 id 를가지고 SqlSessionFactory 객체를통해 DB 와연결하며이때 auto-commit mode 도설정이가능하다. Default 는 autocommit 모드이다. 본장에서는이러한트랜잭션관리방법들을소개한다. MyBatis 에서트랜잭션관리 MyBatis 에서 DB 와연동할경우 ibatis 에서설정파일하나에한개의 DB 를설정할수있었던것과다르게 MyBatis 는 DB 설정을 <environments> 태그로여러개의 DB 를설정할수있게관리한다. MyBatis 는 <environments> 내의 <environment> 태그하나당하나의 DB 를설정할수있으며 <environment> 태그의 <transactionmanager> 에 datasource 를지정하게되며 어플리케이션에서프로그래머가직접트랜잭션을관리할수있다. MyBatis 에서는트랜잭션시작과끝은따로존재하지않으며 Configuration 을통해 SqlSessionFactory 를설정할때 AutoCommit 모드설정이가능하다. 다음의예제는다중 DB 를하나의 Configuration 파일로설정하는예제이다. 예 ) altibase_mybatis_multiversionconnection 의 mybatis-config.xml 파일 <!-- DB 연결옵션 : UNPOOLED/POOLED/JNDI --> <!-- transanctionmanager 옵션 : JDBC/MANAGED --> <environments default="development"> <!-- development alias 의 connection configuration(5 version) --> <environment id="development"> <transactionmanager type="jdbc" /> <datasource type="pooled"> <property name="driver" value="${jdbc5.driver" /> <property name="url" value="${jdbc5.url" /> <property name="username" value="${jdbc5.username" /> <property name="password" value="${jdbc5.password" /> <property name="poolpingquery" value="select 1 from dual"/> <property name="poolmaximumactiveconnections" value="100"/> <property name="poolmaximumidleconnections" value="50"/> <property name="poolmaximumcheckouttime" value="20000"/> </datasource> </environment> <!-- release alias 의 connection configuration(6 or later version) --> <environment id="release"> <transactionmanager type="jdbc" /> <datasource type="pooled"> <property name="driver" value="${jdbc.driver" /> <property name="url" value="${jdbc.url" /> <property name="username" value="${jdbc.username" /> <property name="password" value="${jdbc.password" /> <property name="poolpingquery" value="select 1 from dual"/> <property name="poolmaximumactiveconnections" value="100"/> <property name="poolmaximumidleconnections" value="50"/> <property name="poolmaximumcheckouttime" value="20000"/> </datasource> MyBATIS 연동가이드 26 page of 61

</environment> </environments> 예 ) altibase_mybatis_multiversionconnection 의 MybatisUtil.java 파일 // mybatis-config.xml 로부터설정값을읽어옴 inputstream = Resources.getResourceAsStream("mybatis-config.xml"); // 읽어온 xml 파일로부터 SqlSessionFactory 를생성함.( 이때 environment id 를 nel 에인자값으로부여하여연결하려는 DB 설정 sqlsessionfactory = new SqlSessionFactoryBuilder()build(inputStream, release ); // sqlsession 객체생성. 이때인자값이 autocommit 여부를결정함. // default 는 true 이며 false 값을주게되면 autocommit=false sqlsession = sqlsessionfactory.opensession(false); 위의예제 altibase_mybatis_multiversionconnection 프로젝트를실행하기위해서는 Configuration 파일에 datasource 를설정하여 ALTIBASE 와연동 과마찬가지로 Altibase.jar, mybatis-3.2.8.jar 파일이필요하다. MyBATIS 연동가이드 27 page of 61

MyBATIS 연동시고려사항 Spring 에서 ALTIBASE 에연동할경우고려해야할사항에대해설명한다. LOB 데이터처리 ibatis 에서는 LOB 을처리하기위해서는 Mapper 파일에 parameter 와 result 에대한정보를 setting 하는부분에반드시 jdbctype 을 CLOB/BLOB 이라고명시를해줘야하며 parametermap 을이용하여처리하였지만, Mybatis 에서는 parametermap 이 deprecated 되었기때문에쿼리의 binding 하는컬럼에 jdbctype 을직접명시한다. 명시하지않을경우 LOB 데이터로인식하지않아에러를발생하게된다. 다음은 CLOB 타입의데이터에대한 parametermap 과 resultmap 을지정하여 setting 하고있는예제이다. 예 ) altibase_mybatis_lob 의 LobMapper.xml(Mapper) 파일 <mapper namespace="com.altibase.psy.mapper.lobmapper"> <!-- LOB select, insert, update, delete Test - 2013/11/05 --> <select id="selectblobdata" parametertype="integer" resulttype="lobvo"> SELECT user_no as userno, user_name as username, blob_data as blobdata, clob_data as clobdata, reg_date as regdate FROM test_blob WHERE user_no = #{userno </select> <select id="selectallblobdata" resulttype="lobvo"> SELECT user_no as userno, user_name as username, blob_data as blobdata, clob_data as clobdata, reg_date as regdate FROM test_blob </select> <insert id="insertblobdata" parametertype="lobvo"> insert into test_blob(user_no, user_name, blob_data, clob_data, reg_date) values(#{userno, #{username, #{blobdata,jdbctype=blob, #{clobdata,jdbctype=clob, #{regdate) </insert> <update id="updateblobdata" parametertype="lobvo"> update test_blob set user_name = #{username, blob_data = #{blobdata,jdbctype=blob, clob_data = #{clobdata,jdbctype=clob, reg_date = #{regdate where user_no = #{userno </update>... </mapper> 또한 LOB 처리시반드시주의해야할사항은 ALTIBASE 에서 LOB 데이터를처리하기위해서는반드시 autocommit 모드를 false 로바꾼후트랜잭션을관리해줘야 MyBATIS 연동가이드 28 page of 61

한다는것이다. ibatis 연동시 SqlMapConfig 파일의 <transactionmanager> 에 datasource 를설정할경우에는내부적으로 setautocommit(false); 메소드를호출하여 autocommit 모드를 false 로바꿔주기때문에 LOB 처리시따로고려할사항은없으나 MyBatis 에서는 default 가 true 이기때문에 Session 을얻어올때명시해주어야한다. 만약 autocommit 모드를 false 로변경해주지않으면, java.sql.sqlexception: [0]:LobLocator can not span the transaction 101858625. 과같은에러가발생한다. 그리고 LOB 데이터를입력시에도 java.sql.sqlexception: [0]:LobLocator can not span the transaction 101858625. 에러가발생하게된다. 다음의예제는 MyBatis 에서 Lob 데이터를처리하는 Sample 의일부이며전체소스는부록에첨부하였다. 예 ) altibase_mybatis_lob 의 LobMapper.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="com.altibase.psy.mapper.lobmapper"> <!-- LOB select, insert, update, delete Test - 2013/11/05 --> <select id="selectblobdata" parametertype="integer" resulttype="lobvo"> SELECT user_no as userno, user_name as username, blob_data as blobdata, clob_data as clobdata, reg_date as regdate FROM test_blob WHERE user_no = #{userno </select> <select id="selectallblobdata" resulttype="lobvo"> SELECT user_no as userno, user_name as username, blob_data as blobdata, clob_data as clobdata, reg_date as regdate FROM test_blob </select> <insert id="insertblobdata" parametertype="lobvo"> insert into test_blob(user_no, user_name, blob_data, clob_data, reg_date) values(#{userno, #{username, #{blobdata,jdbctype=blob, #{clobdata,jdbctype=clob, #{regdate) </insert> </mapper> <update id="updateblobdata" parametertype="lobvo"> update test_blob set user_name = #{username, blob_data = #{blobdata,jdbctype=blob, clob_data = #{clobdata,jdbctype=clob, reg_date = #{regdate where user_no = #{userno </update> <delete id="deleteblobdata" parametertype="integer"> delete from test_blob where user_no = #{userno </delete> 위의 altibase_mybatis_lob 프로젝트를실행하기위해서는 Altibase.jar, mybatis-3.2.8.jar 파일이필요하다. MyBATIS 연동가이드 29 page of 61

Insert 시 insert query 가중복되어보내지는현상 문제가나오는현상 : mybatis 설정 xml 내에서 'usegeneratedkeys' 설정을 true 로하면위의문제점발생 위설정은아래와같이정의되어있음 (http://mybatis.github.io/mybatis- 3/ko/sqlmap-xml.html) 데이터베이스에서내부적으로생성한키를받는 JDBC getgeneratedkeys 메서드를사용하도록설정한다. default value : 'false' 이에해당설정을 false 로변경후발생하지않음 기설정은 Oracle 과 informix 내에서는오류가발생하지않음 MyBATIS 연동가이드 30 page of 61

부록 (Mybatis-Altibase 연동 ) Altibase_mybatis_sidu 예제를바탕으로 MyBatis 에서 ALTIBASE 와연동하는방법에대해좀더자세하게설명한다. 단, IDE 는 Eclipse 를사용한다. DB 테이블및시퀀스생성 DB 에다음의테이블과시퀀스를생성한다. create table users( user_no integer, user_name varchar(30), user_content varchar(200), reg_date date ); 프로젝트생성 Eclipse에서 altibase_mybatis_sidu 이라는프로젝트를생성한다. 1. 메뉴 File Java Project 클릭 2. Project name : 에 Altibase_mybatis_sidu 입력 3. Finish 버튼을클릭 MyBATIS 연동가이드 31 page of 61

패키지명명규칙 부록에서설명하고있는패키지명은기본적으로 com.altibase.sidu 를명명하여사용하고있는데이는일반적으로사용하는패키지분류법칙을가져와적용한것이며각각의성격은다음과같다. - com : 첫번째항목은프로젝트를이끄는그룹의성격을결정하는것으로 com 은 company 를의미한다. 만약소규모단체등이라면 org(organization) 를사용할것이다. - altibase : 두번째항목은자사의그룹또는사명을정해주는부분으로보통회사라면회사명이, 특정그룹이라면그룹명이들어간다. 현문서는 ALTIBASE 에서작성하였으므로 altibase 로명명하였다. - sidu : 세번째항목은실제이프로젝트의 artifact 구조를의미한다. 현재 Sample 은 DML 의일반적인명령 (Select/Insert/Delete/Update) 이므로 sidu 로명명하였다. Configuration 파일작성 1. ALTIBASE 연결을위한 property 들을정의한 properties 파일 (db.properties) 을작성한다. ( altibase_mybatis_sidu 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭하여 New File 을클릭한다. File name: 에 db.properties 을작성한다.) jdbc.driver=altibase.jdbc.driver.altibasedriver jdbc.url=jdbc:altibase://192.168.1.62:21020/mydb jdbc.username=sys jdbc.password=manager 2. Configuration 파일 (mybatis-config.xml) 에 ALTIBASE 와연동을위한 datasource 와 SqlMap 파일을설정한다. ( altibase_mybatis_sidu 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭하여 New File 을클릭한다. File name: 에 mybatisconfig.xml 을작성한다.) <?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> <typealiases> <typealias type="com.altibase.sidu.model.uservo" alias="user" /> </typealiases> <environments default="development"> <environment id="development"> <transactionmanager type="jdbc" /> <datasource type="simple"> <property name="driver" value="${jdbc.driver" /> <property name="url" value="${jdbc.url" /> <property name="username" value="${jdbc.username" /> <property name="password" value="${jdbc.password" /> MyBATIS 연동가이드 32 page of 61

<property name="poolpingquery" value="select 1 from dual" /> </datasource> </environment> </environments> <mappers> <mapper resource="com/altibase/sidu/mapper/usermapper.xml" /> </mappers> </configuration> Mapper 파일작성 Users 테이블의 CRUD SQL 구문과 mapping 되는 method 들을정의한 Mapper 파일을작성한다.(Person.xml) Mapper 는 com.altibase.sidu.mapper Package 에작성하게된다. 1. altibase_mybatis_sidu 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭후 New Package 을클릭하여 com.altibase.sidu.mapper 라는신규패키지를생성한다. 2. 생성된신규패키지 (com.altibase.sidu.mapper) 에서마우스오른쪽버튼클릭후 New File 을클릭하여 File name: 에 UserMapper.xml 을작성한다. MyBATIS 연동가이드 33 page of 61

3. 다음의내용을 UserMapper.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="com.altibase.sidu.mapper.usermapper"> <select id="selectuserdata" parametertype="integer" resulttype="user"> SELECT user_no as userno, user_name as username, user_content as usercontent, reg_date as regdate FROM users WHERE user_no = #{userno </select> <select id="selectalluserdata" resulttype="user"> SELECT user_no as userno, user_name as username, user_content as usercontent, reg_date as regdate FROM users </select> <insert id="insertuserdata" parametertype="user"> insert into users(user_no, user_name, user_content, reg_date) values(#{userno, #{username, #{usercontent, #{regdate) </insert> <update id="updateuserdata" parametertype="user"> MyBATIS 연동가이드 34 page of 61

update users set user_name = #{username, user_content = #{usercontent, reg_date = #{regdate where user_no = #{userno </update> <delete id="deleteuserdata" parametertype="user"> delete from users where user_no = #{userno </delete> </mapper> Application 에서 Configuration 의 insert, update, delete Method 를호출할때위의파일에정의되어있는 <insert>, <update>, <delete>, <select> 태그에정의되어있는 id 와일치하는 SQL 문들이자동으로수행이된다. Application 작성 1. users 테이블에대한 VO(Value Object) 객체인 UserVO 클래스 (UserVo.java) 를작성한다. 1-1. altibase_mybatis_sidu 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭후 New Class 를클릭한다. 1-2. Package: 에 com.altibase.sidu.model 를입력하고 Name: 에 UserVo 를입력한다. MyBATIS 연동가이드 35 page of 61

1-3. 다음의내용을 UserVo.java 파일에작성한다. package com.altibase.sidu.model; import java.io.serializable; import java.util.date; @SuppressWarnings("serial") public class UserVo implements Serializable { private Integer userno; private String username; private String usercontent; private Date regdate; public Integer getuserno() { return userno; public void setuserno(integer userno) { this.userno = userno; public String getusername() { return username; public void setusername(string username) { this.username = username; public String getusercontent() { return usercontent; public void setusercontent(string usercontent) { this.usercontent = usercontent; public Date getregdate() { return regdate; public void setregdate(date regdate) { this.regdate = regdate; public String tostring() { return "user_no = " + this.userno + "\n" + "user_name = " + this.username + "\n" + "user_content = " + this.usercontent + "\n" + "reg_date = " + this.regdate; 2. DB 연결및필요한메소드를포함하는 MyBatisUtil.java 클래스를작성한다. MyBATIS 연동가이드 36 page of 61

2-1. altibase_mybatis_sidu 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭후 New Class 를클릭한다. 2-2. Package: 에 com.altibase.sidu.util 을입력하고 Name: 에 MybatisUtil 을입력한다. 2-3. 다음의내용을 MybatisUtil.java 파일에작성한다 package com.altibase.sidu.util; import java.io.ioexception; import java.io.inputstream; import java.text.parseposition; import java.text.simpledateformat; import java.util.calendar; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.session.sqlsessionfactorybuilder; public class MybatisUtil { private static SqlSessionFactory sqlsessionfactory; private static SqlSession sqlsession; public static SqlSession getsqlsessionfactory() { if (sqlsessionfactory == null) { InputStream inputstream; try { inputstream = Resources.getResourceAsStream("mybatis- MyBATIS 연동가이드 37 page of 61

config.xml"); sqlsessionfactory = new SqlSessionFactoryBuilder().build(inputStream); sqlsession = sqlsessionfactory.opensession(false); catch (IOException e) { throw new RuntimeException(e.getCause()); return sqlsession; public String NulltoStr(String str) { if (str == null) { str = ""; return str; public String getformatdate(string date, String originalformat, String wantformat) { java.util.date d = null; SimpleDateFormat dd = new SimpleDateFormat(originalformat); ParsePosition parse = new ParsePosition(0); d = dd.parse(date, parse); Calendar cal = Calendar.getInstance(); cal.settime(d); SimpleDateFormat sdf = new SimpleDateFormat(wantformat); String day = sdf.format(cal.gettime()); return day; 3. MybatisUtil 클래스로부터 SqlSession 객체를받아쿼리를수행하는클래스를작성한다. 예제에서는 DML 각각의처리에대한클래스를별도로선언하여처리하였다. 해당예제에서는 Select 에대한예시만설명한다. 3.1 altibase_mybatis_sidu 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭후 New Class 를클릭한다. 3.2 Package: 에 com.altibase.sidu.application 을입력하고 Name: 에 SiduSampleSelect 를입력한다. MyBATIS 연동가이드 38 page of 61

3.3 다음의내용을 SiduSampleSelect.java 파일에작성한다. package com.altibase.sidu.application; import java.sql.sqlexception; import java.util.list; import com.altibase.sidu.model.uservo; import com.altibase.sidu.util.mybatisutil; public class SiduSampleSelect { public UserVo SiduSelect(int user_no) { UserVo uservo = new UserVo(); try { String statement = "com.altibase.sidu.mapper.usermapper.selectuserdata"; uservo = MybatisUtil.getSqlSessionFactory().selectOne(statement, user_no); return uservo; catch (Exception e) { throw new IllegalArgumentException(e); public List<UserVo> SiduSelectList() throws SQLException { String statement = "com.altibase.sidu.mapper.usermapper.selectalluserdata"; List<UserVo> uservos = MybatisUtil.getSqlSessionFactory().selectList(statement); return uservos; MyBATIS 연동가이드 39 page of 61

4. 실제프로그램이수행되는 Main 클래스를 SiduMain.java 파일에작성한다. package com.altibase.sidu.application; import java.util.calendar; import java.util.list; import com.altibase.sidu.model.uservo; public class SiduMain { /** * @param args */ public static void main(string[] args) { UserVo uservo = new UserVo(); int user_no = 1; int res_count = 0; try { // Insert 예제 uservo.setuserno(user_no); uservo.setusername("sidu_1"); uservo.setusercontent("sidu_content_1"); uservo.setregdate(calendar.getinstance().gettime()); SiduSampleInsert sidu_insert = new SiduSampleInsert(userVo); res_count = sidu_insert.siduinsert(); // Select 예제 SiduSampleSelect sidu_select = new SiduSampleSelect(); uservo = sidu_select.siduselect(user_no); System.out.println(userVo.toString()); // Insert 예제 uservo.setuserno(5); sidu_insert = new SiduSampleInsert(userVo); res_count = sidu_insert.siduinsert(); System.out.println("insert count = " + res_count); // Update 예제 uservo.setusername("sidu_5"); uservo.setusercontent("sidu_content_5"); uservo.setregdate(calendar.getinstance().gettime()); SiduSampleUpdate sidu_update = new SiduSampleUpdate(userVo); res_count = sidu_update.siduupdate(); System.out.println("update count = " + res_count); // Delete 예제 user_no = 5; SiduSampleDelete sidu_delete = new SiduSampleDelete(user_no); res_count = sidu_delete.sidudelete(); System.out.println("delete count = " + res_count); MyBATIS 연동가이드 40 page of 61

// Select All 예제 List<UserVo> uservos = sidu_select.siduselectlist(); for(int i=0; i<uservos.size(); i++) { uservo = uservos.get(i); System.out.println((i+1) + " 번째객체 "); System.out.println(userVo.toString()); // 동일한테스트를두번반복했을때, user_no 가 1 인데이터가 2 개가되어 select 만수행되고 // 프로그램이 Terminate 될수있어서 (SelectOne 메소드사용 ) user_no 가 1 인데이터도삭제해준다. user_no = 1; sidu_delete = new SiduSampleDelete(user_no); res_count = sidu_delete.sidudelete(); catch(exception e) { e.getstacktrace(); 관련 JAR 파일추가 Altibase.jar 와 mybatis-3.2.8.jar 파일을추가한다. altibase_mybatis_sidu 프로젝트에서마우스오른쪽버튼클릭하여 Properties 를클릭 Java Build Path Libraries 에서 Add External JARS 를클릭하여 Altibase.jar 와 mybatis- 3.2.8.jar 파일을추가한다. MyBATIS 연동가이드 41 page of 61

Application 실행 altibase_mybatis_sidu 프로젝트를실행한다. altibase_mybatis_sidu 프로젝트를클릭한후메뉴에서 Run 을실행하거나 com.altibase.sidu.application 패키지의 SiduMain.java 클래스를더블클릭하여파일을연후에 Run 을실행한다. MyBATIS 연동가이드 42 page of 61

부록 2(Spring-Mybatis-Altibase 연동 ) altibase_mybatis_spring 예제를바탕으로 Spring-MyBatis-ALTIBASE 와연동하는방법에대해좀더자세하게설명한다. 단, IDE 는 Eclipse 를사용한다. DB 테이블및시퀀스생성 DB 에다음의테이블과시퀀스를생성한다. create table users( user_no integer, user_name varchar(30), user_content varchar(200), reg_date date ); Spring 설치 Spring 을사용하려면 STS(STS, SpringSource Tools Suite) 를설치해야한다. STS 란이클립스에서 Spring 으로개발시에편리하게클립에서스프링으로개발할때편리를제공하는플러그인으로아래목록중 Eclipse 의 Version 에맞게설치한다. MyBATIS 연동가이드 43 page of 61

Maven 설치 - Maven 은 Apache Software Foundation 에서개발되고있는소프트웨어프로젝트관리툴이다. Maven 은 Project Object Model(POM) 이라는것에기초를두어프로젝트의빌드, 테스트, 도큐멘테이션등프로젝트라이프사이클전체를관리할수있는툴이며 Spring-Mybatis-Altibase 연동테스트소스도 Maven 을적용하여관리하게되었다. 해당 part 는 Maven 의설치과정을설명한다. 1. Maven 파일다운로드 - http://maven.apache.org/download.html 에서 binary zip 파일을다운받는다. 2014 년 10 월현재최신버전은 apache-maven-3.2.8-bin.zip) 2. 메이븐환경설정 - 압축을해제한후에윈도우환경변수 ( 바탕화면 -> 내컴퓨터 -> 속성 -> 고급 -> 환경변수 ) 에서 MAVEN_HOME(c:\maven) 을사용자변수에추가하고, PATH 설정에 maven binary path 를포함시킨다. - 윈도우에서시작 -> 실행 -> cmd 입력후도스창뜨면 mvn version 입력하여버전이뜨면 OK MyBATIS 연동가이드 44 page of 61

3. eclipse 에서 maven 다운로드 - eclipse 의 Help->Eclipse Marketplace 를클릭하여 STS 를다운받는것과같이 maven 을다운로드받는다. 4. 압축을해제한 maven 을 eclipse 에설정한다. - windows -> preference -> Maven -> Installatios 아래 browse 클릭하여 C:\maven\conf\settings.xml 경로를잡아주고 Apply. MyBATIS 연동가이드 45 page of 61

프로젝트생성 Eclipse 에 STS 를설치하면 Spring Template Project 의 Spring 기반프로젝트가생성이가능하다. 다음의단계를거쳐프로젝트를생성한다. 1. 메뉴 File-New-Spring Template Project 를클릭하여 Spring MVC Project 를생성 2. Project name : 에 altibase_mybatis_spring, top-level package 에 com.altibase.test 입력 (Spring 은프로젝트생성시 default 패키지명을필수로입력해야한다.) 3. Finish 버튼을클릭 MyBATIS 연동가이드 46 page of 61

패키지명명규칙 부록에서설명하고있는패키지명은기본적으로 com.altibase.test 를명명하여사용하고있는데이는일반적으로사용하는패키지분류법칙을가져와적용한것이며각각의성격은다음과같다. - com : 첫번째항목은프로젝트를이끄는그룹의성격을결정하는것으로 com 은 company 를의미한다. 만약소규모단체등이라면 org(organization) 를사용할것이다. - altibase : 두번째항목은자사의그룹또는사명을정해주는부분으로보통회사라면회사명이, 특정그룹이라면그룹명이들어간다. 현문서는 ALTIBASE 에서작성하였으므로 altibase 로명명하였다. - test : 세번째항목은실제이프로젝트의 artifact 구조를의미한다. 현재 Samle 은 DML 의일반적인명령 (Select/Insert/Delete/Update) 이므로 test 로명명하였다. ApplicationContext 파일작성 스프링코드작성에서가장먼저해야할것은 AppilcationContext 라고불리는스프링빈설정파일을작성하는것이다. 아래는스프링빈설정파일의내역이다. <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <description>example configuration to get you started.</description> <!-- 지정된패키지에서빈을탐색 --> <context:component-scan base-package="com.altibase.test.service" /> <!-- Apache DBCP 를이용한 ALTIBASE DB 접속방법 - Apache DBCP 라초기에 Session Pool 을붙이는프로퍼티가존재하며물론최초연결시에 initialsize 만큼 Session 을만들어두는것도가능하다. --> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="altibase.jdbc.driver.altibasedriver" /> <property name="url" value="jdbc:altibase://192.168.1.62:21020/mydb" /> <property name="username" value="test" /> <property name="password" value="test" /> <property name="initialsize" value="10" /> <property name="minidle" value="25" /> <property name="maxidle" value="30" /> <property name="maxactive" value="100" /> MyBATIS 연동가이드 47 page of 61

<property name="validationquery" value="select 1 from dual" /> <property name="testonborrow" value="false" /> </bean> <!-- 트랜잭션사용 --> <bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource" /> </bean> <!-- 트랜잭션 annotation 정의 --> <tx:annotation-driven transaction-manager="txmanager"/> <!-- SqlSessionFactory 정의 --> <!-- typealiasespackage 속성에는맵퍼정의파일 (XML) 내의 SQL 문장에서참조하는도메인클래스가포함된패키지를지정 --> <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="datasource" ref="datasource" /> <property name="typealiasespackage" value="com.altibase.test.domain" /> </bean> <!-- 맵퍼인터페이스와맵퍼정의파일에의해생성된맵퍼클래스를빈에주입할수있도록함 --> <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <property name="basepackage" value="com.altibase.test.persistence" /> </bean> </beans> MyBATIS 연동가이드 48 page of 61

Mapper 파일작성 Users 테이블의 CRUD SQL 구문과 mapping 되는 method 들을정의한 Mapper 파일을작성한다. Spring 의방식을따라야하기때문에의존적주입 (Dependency Injection) 방식을사용하게된다.(UserMapper.xml, UserMapper.java) Mapper 는 com.altibase.test.persistence Package 에작성하게된다. 1. altibase_mybatis_spring 프로젝트 src 디렉토리에서마우스오른쪽버튼클릭후 New Package 을클릭하여 com.altibase.test.persistence 라는신규패키지를생성한다. 2. 생성했던신규패키지 (com.altibase.test.persistence) 에마우스오른쪽버튼클릭후 New Interface 를클릭하여 UserMapper.java 파일을생성한다 3. 생성한 Interface 파일의내용을다음과같이작성한다. package com.altibase.test.persistence; import java.util.list; import com.altibase.test.domain.uservo; public interface UserMapper { public List<UserVo> getalluser(); public UserVo getuserbyno(int user_no); public Integer insertuserdata(uservo uservo); public Integer deleteuserbyno(int user_no); public Integer updateuserbyno(uservo uservo); MyBATIS 연동가이드 49 page of 61

4. 생성된신규패키지 (com.altibase.test.persistence) 에서마우스오른쪽버튼클릭후 New File 을클릭하여 File name: 에 UserMapper.xml 을작성한다. 5. 다음의내용을 UserMapper.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="com.altibase.test.persistence.usermapper"> <select id="getalluser" parametertype="integer" resulttype="uservo"> SELECT user_no as userno, user_name as username, user_content as usercontent, reg_date as regdate FROM users WHERE user_no = #{userno </select> <select id="getuserbyno" resulttype="uservo"> SELECT user_no as userno, user_name as username, user_content as usercontent, reg_date as regdate FROM users </select> <insert id="insertuserdata" parametertype="uservo"> insert into users(user_no, user_name, user_content, reg_date) values(#{userno, #{username, #{usercontent, #{regdate) </insert> MyBATIS 연동가이드 50 page of 61

<update id="updateuserbyno" parametertype="uservo"> update users set user_name = #{username, user_content = #{usercontent, reg_date = #{regdate where user_no = #{userno </update> <delete id="deleteuserbyno" parametertype="integer"> delete from users where user_no = #{userno </delete> </mapper> 해당방식은 Spring 만의방식으로의존적주입 (Dependency Injection) 의방식으로처리하고있다. Application 에서는인터페이스에정의되어있는메소드를통하여 SQL 문을처리한다. Dependency Injection Dependency Injection( 줄여서 DI) 는직역하면의존적주입이다. Dependency Injection 이란 Gof 의디자인패턴에있는기법으로, 실제사용자가사용하게될메소드를인터페이스로지정하여실제로직과분리하여처리하는기법이다. 이렇게처리하게되면사용자는인터페이스의메소드만이용하더라도구현부는나중에주입을통해해결하므로획기적인분업과동시에구현클래스를쉽게교체할수있다는장점을얻게된다. Application 작성 1. users 테이블에대한 VO(Value Object) 객체인 UserVO 클래스 (UserVo.java) 를작성한다. 1-1. altibase_mybatis_spring 프로젝트의 src/main/java 디렉토리에서마우스오른쪽버튼클릭후 New Class 를클릭한다. 1-2. Package: 에 com.altibase.test.domain 을입력하고 Name: 에 UserVo 를입력한다. MyBATIS 연동가이드 51 page of 61

1-3. 다음의내용을 UserVo.java 파일에작성한다. package com.altibase.test.domain; import java.io.serializable; import java.util.date; @SuppressWarnings("serial") public class UserVo implements Serializable { private Integer userno; private String username; private String usercontent; private Date regdate; public UserVo() { public UserVo(Integer userno, String username, String usercontent, Date regdate) { this.userno = userno; this.username = username; this.usercontent = usercontent; this.regdate = regdate; public Integer getuserno() { return userno; public void setuserno(integer userno) { this.userno = userno; MyBATIS 연동가이드 52 page of 61

public String getusername() { return username; public void setusername(string username) { this.username = username; public String getusercontent() { return usercontent; public void setusercontent(string usercontent) { this.usercontent = usercontent; public Date getregdate() { return regdate; public void setregdate(date regdate) { this.regdate = regdate; @Override public String tostring() { return "User [no=" + userno + ", name=" + username + ", content=" + usercontent + ", date=" + regdate + "]"; 2. 실제쿼리를수행하는인터페이스및주입클래스파일을작성한다. 2-1. altibase_mybatis_spring 프로젝트의 src/main/java 디렉토리에서마우스오른쪽버튼클릭후 New Interface 를클릭한다. 2-2. Package: 에 com.altibase.test.service 를입력하고 Name: 에 UserService 를입력한다. MyBATIS 연동가이드 53 page of 61

2-3. 다음의내용을 UserService.java 파일에작성한다. package com.altibase.test.service; import java.util.list; import com.altibase.test.domain.uservo; public interface UserService { public List<UserVo> getalluser(); public UserVo getuserbyno(int user_no); public Integer insertuserdata(uservo uservo); public Integer deleteuserbyno(int user_no); public Integer updateuserbyno(uservo uservo); 2-4. 생성했던신규패키지 (com.altibase.test.service) 에마우스오른쪽버튼클릭후 New Class 를클릭하여실제로직을처리하는 UserServiceImpl.java Class 파일을생성한다. MyBATIS 연동가이드 54 page of 61

2-5. 다음의내용을 UserMapperImple.java 파일에작성한다 package com.altibase.test.service; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.service; import com.altibase.test.domain.uservo; import com.altibase.test.persistence.usermapper; @Service("userService") public class UserServiceImpl implements UserService { @Autowired private UserMapper usermapper; private Integer res_count; public List<UserVo> getalluser() { List<UserVo> uservos = usermapper.getalluser(); return uservos; public UserVo getuserbyno(int user_no) { UserVo uservo = usermapper.getuserbyno(user_no); return uservo; public Integer insertuserdata(uservo uservo) { res_count = usermapper.insertuserdata(uservo); return res_count; public Integer deleteuserbyno(int user_no) { MyBATIS 연동가이드 55 page of 61

res_count = usermapper.deleteuserbyno(user_no); return res_count; public Integer updateuserbyno(uservo uservo) { res_count = usermapper.updateuserbyno(uservo); return res_count; 3. 실제프로그램이수행되는 Main 클래스를 Main.java 파일에작성한다. package com.altibase.test; import java.util.calendar; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; import com.altibase.test.domain.uservo; import com.altibase.test.service.userservice; public class Main { private static UserService userservice; public static void main(string[] args) { // TODO Auto-generated method stub int res_count = 0; ApplicationContext applicationcontext = new ClassPathXmlApplicationContext("META-INF/spring/ApplicationContext.xml"); userservice = (UserService)applicationContext.getBean("userService"); UserVo uservo = new UserVo(); // Insert 샘플 uservo.setuserno(1); uservo.setusername("psy"); uservo.setusercontent("psy_content"); uservo.setregdate(calendar.getinstance().gettime()); res_count = userservice.insertuserdata(uservo); System.out.println("insert count = " + res_count); // Select 샘플 uservo = userservice.getuserbyno(1); System.out.println("no = " + uservo.getuserno()); System.out.println("name = " + uservo.getusername()); System.out.println("content = " + uservo.getusercontent()); System.out.println("date = " + uservo.getregdate()); // Update 샘플 uservo.setusername("updated_psy"); uservo.setusercontent("updated_psy_content"); res_count = userservice.updateuserbyno(uservo); System.out.println("update count = " + res_count); MyBATIS 연동가이드 56 page of 61

// Delete 샘플 res_count = userservice.deleteuserbyno(uservo.getuserno()); System.out.println("delete count = " + res_count); 관련 JAR 파일추가 Jar 를추가하는방법은두가지이다. - Maven 에의한라이브러리추가 - 기존방식대로 (properties-java Build Path 의 Add External JARS) 의라이브러리추가 샘플소스는 Maven 에의한라이브러리관리방법을선택하여작성되었으며, 두번째방법인기존방식은위에서도설명한바있어본장에선 Maven 에의한라이브러리관리방법을설명한다. Maven 을설치하여 Spring Template Project 를생성하면 pom.xml 이라는파일이생성되는데, 해당파일이라이브러리를관리해주는파일이다. pom.xml 파일에서 library 를추가하는방법은두가지이다. - pom.xml 탭에서태그를직접입력하여 library 추가 - Dependencies 탭에서 Add 버튼으로 library 추가 태그를직접입력하는방법은, 위의탭중 pom.xml 탭을눌러나타나는 xml 파일에직접입력하여 library 를추가하는방법이며아래화면과같이추가한다. ( 테스트에사용한 library 는 Apache common dbcp library 이다.) MyBATIS 연동가이드 57 page of 61

추가한후에 xml 파일을저장하면 Maven Dependecies 에 Library 가추가된것을확인할수있다. Dependencies 탭에서 Add 버튼으로 library 추가하는방법은다음과같은단계를거쳐추가가가능하다. 1) pom.xml 파일에서 dependencies-add 버튼을클릭하면다음의창이뜨게된다. 해당창의 Enter groupid, artifactid or sha1 prefix or pattern (*) : 칸에추가하고싶은 library의이름을입력하게되면아래와같이입력한이름에대한라이브러리를보여준다. MyBATIS 연동가이드 58 page of 61

2) Search Results 에나타난 Library 를클릭하면해당 Library 에대한버전이나타나게되고필요한버전을클릭한후 OK 버튼을클릭하면해당 Library 가추가된다. 라이브러리가추가된것을확인할수있다. MyBATIS 연동가이드 59 page of 61

파일을저장하면변경된내역이반영되면서 Library 가추가된다. 마지막에 Library 가추가된것을보면 commons-dbcp 말고 commons-pool 도같이추가가되었는데, dependencies 탭을통해추가하게되면이와같이관련된 Library 도같이추가해준다. Application 실행 altibase_mybatis_spring 프로젝트를실행한다. altibase_mybatis_spring 프로젝트를클릭한후메뉴에서 Run 을실행하거나 com.altibase.test 패키지의 Main.java 클래스를더블클릭하여파일을연후에 Run 을실행한다. MyBATIS 연동가이드 60 page of 61