티스토리 뷰
Springi Batis 7-1 iBatis Framework 개요
iBatis 란?
Data Mapper, Sql Mapper
미리 작성된 SQL 구문을 실행하고 실행 결과를 자바 객체에 매핑하여리턴함.
ORM(Object Relation Mapping) : 데이터베이스 전체를 자바 객체로 매핑
Data Mapping : SQL 구문을 자바 객체와 매핑
Data Mapper
객체와 데이터베이스 그리고 매퍼 자체를 독립적으로 유지하면서 객체와 데이터베이스 간에 데이터를 이동시킴.
SQL 구문 작성에 필요한 데이터를 클래스의 필드에서 추출하고 SQL 실행 결과를 클래스에 매핑
VO <--> SQL 구문
JDBC의 ResultSet과 VO를 연결하는 작업, VO의 속성을 파라미터로 전달하는 과정을 자동화해줌
사용 예
CREATE TABLE MEMBER(
ID VARCHAR2(8) PRIMARY KEY,
PASSWORD VARCHAR2(8),
NAME VARCHAR2(20),
ROLE VARCHAR2(5)
);
public class MemberVO{
private String id;
private String password;
private String name;
private String role;
//Setter, Getter, Constructor 생략
}
<select id="getMember" resultClass="UserVO" parameterClass="java.lang.Integer">
SELECT ID, PASSWORD, NAME, ROLE FROM MEMBER WHERE ID = #id#
</select>
iBatis 구조

iBatis Quick Start
SqlMapConfig.xml 작성하기
iBatis에 대한 전반적인 환경 설정 파일
<sqlMapConfig />를 루트 엘리먼트로 사용
properties, dataSource, sqlMap요소 지정
<?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="properties/database.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="com/multicampus/biz/user/user-mapping.xml" />
</sqlMapConfig>
properties 파일 작성
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=hr
password=hr
Java Bean 작성
public class UserVO {
private String id;
private String password;
private String name;
private String role;
// Getter,Setter Methods 생략
}
iBatis Quick Start - 이어서
SqlMap.xml 작성
SQL 구문을 이 파일에 작성
SQL 실행 결과를 VO 객체에 매핑하는 규칙을 정의함
SQL 구문에 부여된 id 속성을 unique 해야 함. (예 : getUser)
<?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>
<select id="getUser" resultClass="com.multicampus.biz.user.vo.UserVO"
parameterClass="com.multicampus.biz.user.vo.UserVO">
SELECT * FROM USERS WHERE ID=#id#
</select>
</sqlMap>
sqlMapClient 생성
매번 객체 생성 코드를 반복하는 것을 피하기 위해 Util 클래스 작성
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class SqlMapClientFactory {
private static SqlMapClient sqlMapClient = null;
static {
try {
if (sqlMapClient == null) {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlMapClient getSqlMapClientInstance() {
return sqlMapClient;
}
}
DAO 클래스 작성
SqlMapClientFactory 클래스를 이용해서 DAO 클래스를 구현함.
public class UserDAO {
private SqlMapClient sqlMapClient;
public UserDAO() {
sqlMapClient = SqlMapClientFactory.getSqlMapClientInstance();
}
public UserVO getUser(UserVO vo) throws SQLException {
User user = (User) sqlMapClient.queryForObject("getUser", vo);
return user;
}
}
'it' 카테고리의 다른 글
| C++ 2차원 배열 (0) | 2022.11.26 |
|---|---|
| C언어 변수 (0) | 2022.11.08 |
| 스프링 개발환경구축 서버구축) / 리눅스(CentOS 6.8/64bit) WEB서버 아파치 설치 (0) | 2022.10.24 |
| 자바스크립트(javascript)와 JSP (0) | 2022.10.22 |
| 데이터베이스 시스템 /스키마 인스턴스 / 3단계 데이터베이스 구조 / 데이터 독립성 (0) | 2022.10.20 |
