ibatis 공식 사이트에서 ibatis-2.3.4.726.zip을 다운받고 암축을 푼다.

이 안에는 simple_example란 예제가 있다.


이 안의 샘플 예제로 연습을 해본다.



1. 프로젝트는 Simple Spring Maven으로 생성한다.






2. pom.xml에 DB연동 모듈 추가, iBATIS 관련 모듈 추가


(JDBC 대신 iBATIS를 쓰는 것이므로 JDBC 모듈은 필요 없다.)


※ ojdbc6는 첫번째 <properties>가 끝나는 지점(</properties>) 이후에 넣자.


<!-- ojdbc6 설정 추가 -->

<repositories>

<repository>

<id>codelds</id>

<url>http://code.lds.org/nexus/content/groups/main-repo</url>

</repository>

</repositories>



※ DB 관련 모듈들은 최하단 Test 관련 <dependency> 위에 넣자.


<!-- Oracle 11g 라이브러리 사용 -->

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.2.0.3</version>

</dependency>

<!-- DBCP 추가 -->

<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>20030825.184428</version>

</dependency>

<dependency>

<groupId>commons-pool</groupId>

<artifactId>commons-pool</artifactId>

<version>20030825.183949</version>

</dependency>

<dependency>

<groupId>commons-collections</groupId>

<artifactId>commons-collections</artifactId>

<version>20040616</version>

</dependency>


<!-- iBatis 모듈 추가 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>3.1.1.RELEASE</version>

</dependency>


<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-ibatis</artifactId>

<version>2.0.8</version>

</dependency>

<dependency>

<groupId>org.apache.ibatis</groupId>

<artifactId>ibatis-sqlmap</artifactId>

<version>2.3.0</version>

</dependency>




3. DB 구축


src/main/resources/sql에 sql 파일 만들고 DB 접속하여 SQL문 입력.


drop table user1 purge;


create table user1(

user_id varchar2(20) primary key,

user_pwd varchar2(20),

user_name varchar2(20)

);


insert into user1 values('hong', '1111', 'hongkildong');

insert into user1 values('lee', '2222', 'leesoonshin');


select * from user1; 





4. iBatis가 참조하는 설정 파일


iBatis가 관리하는 설정 파일 sqlMapConfig.xml

샘플 파일 내에서의 경로(C:\Users\Administrator\Downloads\ibatis-2.3.4.726\simple_example\com\mydomain\data)

이것을 src/main/resources에 dbinfo 경로 만들어 그 안에 넣는다.




  <transactionManager type="JDBC" commitRequired="false">

    <dataSource type="SIMPLE">

      <property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>

      <property name="JDBC.ConnectionURL" value="jdbc:hsqldb:."/>

      <property name="JDBC.Username" value="sa"/>

      <property name="JDBC.Password" value="sa"/>

    </dataSource>

  </transactionManager>


이런식으로 직접 접속하는 것을 설정 파일 안에 넣어도 되지만 별도의 프로퍼티 파일을 만들어서 담아준 뒤 불러와도 된다.



1) 프로퍼티 파일 생성


dbconnect.properties란 이름으로 파일을 만들어 다음과 같이 입력한다.


driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@localhost:1521:xe

username=hr

password=tiger



2) sqlMapConfig.xml 수정


다음 sqlMapConfig.xml 안에서 이 프로퍼티 파일을 불러와주면 된다.

<sqlMapConfig> 아래에 다음과 같이 넣는다.


<properties resource="dbinfo/dbconnect.properties" />


<transactionManager type="JDBC" commitRequired="false">

    <dataSource type="DBCP">

      <property name="JDBC.Driver" value="${driber}"/>

      <property name="JDBC.ConnectionURL" value="${url}"/>

      <property name="JDBC.Username" value="${username}"/>

      <property name="JDBC.Password" value="${password}"/>

    </dataSource>

 </transactionManager>


커넥션 풀 타입으로 바꿀 때엔 데이터 소스 타입을 SIMPLE에서 DBCP로 변경하면 된다.


전체 구성


<?xml version="1.0" encoding="UTF-8" ?>


<!DOCTYPE sqlMapConfig      

    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      

    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">


<sqlMapConfig>


<properties resource="dbinfo/dbconnect.properties"/>


  <!-- Configure a built-in transaction manager.  If you're using an 

       app server, you probably want to use its transaction manager 

       and a managed datasource -->

  <transactionManager type="JDBC" commitRequired="false">

    <dataSource type="DBCP">

      <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>


  <!-- List the SQL Map XML files. They can be loaded from the 

       classpath, as they are here (com.domain.data...) -->

  <sqlMap resource="dbinfo/User.xml"/>

  <!-- List more here...

  <sqlMap resource="com/mydomain/data/Order.xml"/>

  <sqlMap resource="com/mydomain/data/Documents.xml"/>

  -->


</sqlMapConfig>




3) 샘플의 Account.xml 수정 (이름을 User.xml로 변경)


sqlMapConfig.xml에서 다음과 같이 불러온다.


<sqlMap resource="dbinfo/User.xml"/>








5. 자바빈 클래스 생성


스프링에서 자바빈을 퍼시스턴스(persistence/영속성)라고도 부른다.



1) 자바빈 생성


package spring.dto;


public class User {

private String user_id;

private String user_pwd;

private String user_name;

public String getUser_id() {

return user_id;

}

public void setUser_id(String user_id) {

this.user_id = user_id;

}

public String getUser_pwd() {

return user_pwd;

}

public void setUser_pwd(String user_pwd) {

this.user_pwd = user_pwd;

}

public String getUser_name() {

return user_name;

}

public void setUser_name(String user_name) {

this.user_name = user_name;

}

}



2) 설정파일에 자바빈 연결 (매핑)


User.xml에 자바빈 연결.


프로퍼티에는 자바빈의 변수명을, 컬럼에는 DB상의 컬럼명을 넣어준다.


<sqlMap>


<typeAlias alias="User" type="spring.dto.User"/>


  <resultMap id="UserResult" class="spring.dto.User">    

    <result property="userId" column="user_id"/>

    <result property="userPwd" column="user_pwd"/>

    <result property="userName" column="user_name"/>

  </resultMap>



User.xml의 전체 파일


<?xml version="1.0" encoding="UTF-8" ?>


<!DOCTYPE sqlMap      

    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"  "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>


  <!-- Use type aliases to avoid typing the full classname every time. -->

  <typeAlias alias="User" type="spring.dto.User"/>


  <!-- Result maps describe the mapping between the columns returned  from a query, and the class properties.  A result map isn't

       necessary if the columns (or aliases) match to the properties  exactly. -->

  <resultMap id="UserResult" class="spring.dto.User">

    <result property="userId" column="user_id"/>

    <result property="userPw" column="user_pwd"/>

    <result property="userName" column="user_name"/>

  </resultMap>


  <!-- Select with no parameters using the result map for Account class. -->

  <select id="selectAll" resultMap="UserResult">

    select * from user1

  </select>


  <!-- A simpler select example without the result map.  Note the 

       aliases to match the properties of the target result class. -->

  <!-- <select id="selectAccountById" parameterClass="int" resultClass="Account">

    select

      ACC_ID as id,

      ACC_FIRST_NAME as firstName,

      ACC_LAST_NAME as lastName,

      ACC_EMAIL as emailAddress

    from ACCOUNT

    where ACC_ID = #id#

  </select> -->

   

  <!-- Insert example, using the Account parameter class -->

  <!-- <insert id="insertAccount" parameterClass="Account">

    insert into ACCOUNT (

      ACC_ID,

      ACC_FIRST_NAME,

      ACC_LAST_NAME,

      ACC_EMAIL

    values (

      #id#, #firstName#, #lastName#, #emailAddress#

    )

  </insert> -->


  <!-- Update example, using the Account parameter class -->

  <!-- <update id="updateAccount" parameterClass="Account">

    update ACCOUNT set

      ACC_FIRST_NAME = #firstName#,

      ACC_LAST_NAME = #lastName#,

      ACC_EMAIL = #emailAddress#

    where

      ACC_ID = #id#

  </update> -->


  <!-- Delete example, using an integer as the parameter class -->

  <!-- <delete id="deleteAccountById" parameterClass="int">

    delete from ACCOUNT where ACC_ID = #id#

  </delete> -->


</sqlMap>






6. iBatis를 동작시키는 메인 클래스 생성


1) 메인 클래스 


package spring.ibatis;


import java.io.IOException;

import java.io.Reader;

import java.sql.SQLException;

import java.util.List;

import java.util.Scanner;


import com.ibatis.common.resources.Resources;

import com.ibatis.sqlmap.client.SqlMapClient;

import com.ibatis.sqlmap.client.SqlMapClientBuilder;


import spring.dto.User;


public class UserDaoImpl {

// SqlMapClient 클래스는 Mapper를 생성하는 클래스이다.

// static 멤버로 선언 - 미리 메모리 할당

private static SqlMapClient sqlMapper;

static{

try {

// 1. SqlMapConfig.xml 파일의 설정 내용을 가져온다.

Reader reader = Resources.getResourceAsReader("dbinfo/SqlMapConfig.xml");

// 2. Mapper 객체 생성하기

sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}


public static void main(String[] args) {

UserDaoImpl iBatis = new UserDaoImpl();

iBatis.start();

}

public void start(){

Scanner sc = new Scanner(System.in);

boolean flag = true;

while(flag){

System.out.println("=================");

System.out.println("1. 프로그램 종료.");

System.out.println("2. 모든 유저 출력");

System.out.println("=================");

System.out.print("번호를 입력하세요: ");

int num = Integer.parseInt(sc.nextLine());

switch(num){

case 1:

System.out.println("프로그램을 종료합니다.");

System.exit(0);

break;

case 2:

try {

List<User> list;

list = sqlMapper.queryForList("selectAll");

for(User user : list){

System.out.println("사용자 ID : "+user.getUserId()+"\t"

  +"사용자 비밀번호 : "+user.getUserPw()+"\t"

  +"사용자 이름 : "+user.getUserName());

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

break;

default:

System.out.println("잘못된 번호를 입력하셨습니다.");

break;

}

}

}

}



2) User.xml에서 셀렉트문의 내용을 다음과 같이 변경한다.

<!-- Select with no parameters using the result map for Account class. -->

<select id="selectAll" resultMap="UserResult">

  select * from user1

</select>




Posted by netyhobby
,