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 |