본문 바로가기

Programing/IBatis

iBatis - iBatis 초보~

iBatis는 자바 객체(자바빈즈)를 PreparedStatement바인드변수(parameter)

또는 ResultSet에 mapping을 시키는 일을 하여 개발자로 하여금 보다

편리한 DataBase작업을 하도록 지원해주는 ORM(Object Relational Mapper)이다.



사용자 삽입 이미지


iBatis - ibatis - 2.3.0.677.jar 라이브러리 등록은 필수





기존 JDBC방식


Emp.java


package ex1_jdbc;


public class Emp {
    int empno, sal, deptno;
    String ename, job, hiredate;

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

    public int getEmpno() {
        return empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getHiredate() {
        return hiredate;
    }

    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public int getSal() {
        return sal;
    }

    public void setSal(int sal) {
        this.sal = sal;
    }
}




JDBCEx.java


package ex1_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;


public class JDBCEx {
    //순수 JDBC기술을 이용하여 emp테이블에 있는
    //자원들을 Emp라는 자바빈즈로 가져오는 예제

    public static void main(String[] args) throws Exception {
        //아래의 드라이버 로딩 때문에 오라클 라이블러리가 필요하다.
        Class.forName("oracle.jdbc.driver.OracleDriver");
       
        Connection con = DriverManager.getConnection(
          "jdbc:oracle:thin:@localhost:1521:ORCL1", "scott", "tiger");
       
        PreparedStatement pstmt = con.prepareStatement(
                "SELECT * FROM emp");
       
        ResultSet rs = pstmt.executeQuery();
        ArrayList<Emp> list = new ArrayList<Emp>();
        while(rs.next()){
            //현재 반복문에 들어오면 분명 결과가 1개라도 있는 경우
            Emp emp = new Emp(); //결과 1개마다 Emp객체 생성
            emp.setEmpno(rs.getInt("empno"));
            emp.setEname(rs.getString("ename"));
            emp.setJob(rs.getString("job"));
            emp.setSal(rs.getInt("sal"));
            emp.setHiredate(rs.getString("hiredate"));
            emp.setDeptno(rs.getInt("deptno"));
            list.add(emp); //ArrayList에 추가
        } //end while
       
        //결과는 모두 Emp로 만들어진 후 ArrayList에 적재되었다.
        print(list);
    } // 메인 메서드 끝

    private static void print(ArrayList<Emp> list) {
        for(Emp n : list){
            System.out.print(n.getEmpno()+","+n.getEname()+","+
                    n.getJob()+"\n");
        }
        System.out.println("총 자원의 수:"+list.size());
    }
}


JDBC 결과 (IBATIS동일)


사용자 삽입 이미지






iBatis 방식


ex2_ibatis/Emp.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>
    <!-- 결과를 자바객체로 정의할 별칭 선언과 sql문을 정의한다. -->
    <typeAlias alias="emp" type="ex2_ibatis.vo.Emp"/>
   
    <resultMap id="empResult" class="emp">
        <result property="empno" column="EMPNO"/>
        <result property="ename" column="ENAME"/>
        <result property="job" column="JOB"/>
        <result property="sal" column="SAL"/>
        <result property="hiredate" column="HIREDATE"/>
        <result property="deptno" column="DEPTNO"/>
    </resultMap>
   
    <select id="allEmp" resultMap="empResult">
        select * from emp
    </select>
</sqlMap>



ex2_ibatis/EmpExample.java


package ex2_ibatis;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import ex2_ibatis.vo.Emp;
import java.io.Reader;
import java.util.List;


public class EmpExample {
    //sqlMapConfig.xml 문저는 응용프로그램이 실행되는 돈안 오로지 단 한번만
    //인식되어야 하므로 static화 한다.
    //그리고, sqlMapConfig.xml에 있는 sqlMap을 접근하기 위해 필요한 SqlMapClient라는
    //객체또한 static을 선언한다.
    private static SqlMapClient sqlMapper;
   
    static{ //static 초기화(무조건 제일먼저수행/딱한번 수행)
        try {
            //sqlMapConfig.xml에 있는 정보 읽기
            Reader reader = Resources.getResourceAsReader("ex2_ibatis/sqlMapConfig.xml");
           
            sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 각 sql문에 따라 메서드로 작업해 둔다.
    public static List<?> allEmp()throws Exception{
        return sqlMapper.queryForList("allEmp"); //<select>엘리먼트의 id
    }
   
    public static void main(String[] args) throws Exception{
        List<?> list = allEmp();
        for (Object n : list) {
            Emp e =(Emp) n;     
            System.out.print(e.getEmpno()+","+e.getEname()+","+
                    e.getJob()+"\n");
        }
    }
}



ex2_ibatis/sqlMapConfig.xml


<?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>
    <!--RDBMS의 정보와 SQL문을 가지는 sqlMap문서를 연결한다.-->
    <transactionManager type="JDBC" commitRequired="false">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:ORCL1"/>
            <property name="JDBC.Username" value="scott"/>
            <property name="JDBC.Password" value="tiger"/>
        </dataSource>
    </transactionManager>
   
    <!-- sql문을 저장하고 있는 sqlMap문서(xml)를 참조시킨다. -->
    <sqlMap resource="ex2_ibatis/Emp.xml"/>
</sqlMapConfig>



ex_ibatis.vo/Emp.java


package ex2_ibatis.vo;

public class Emp {
    int empno, sal, deptno;
    String ename, job, hiredate;

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

    public int getEmpno() {
        return empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getHiredate() {
        return hiredate;
    }

    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public int getSal() {
        return sal;
    }

    public void setSal(int sal) {
        this.sal = sal;
    }
}


IBATIS결과(JDBC동일)


 

사용자 삽입 이미지

 

'Programing > IBatis' 카테고리의 다른 글

스프링관련 링크~  (0) 2009.12.18
펌글]iBatis vs. Hibernate중 어떤게 더 좋아요?  (0) 2008.10.25
iBatis - iBatis  (0) 2008.07.29
iBatis - iBatis초보2  (0) 2008.07.29