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>
' Spring Framework' 카테고리의 다른 글
MyBatis 실습: DB연동 구조 (완성) (0) | 2016.04.12 |
---|---|
iBATIS 실습: DB연동 구조 (완성) (0) | 2016.04.12 |
스프링 JDBC 연동을 통한 쇼핑몰: 커넥션 풀 (0) | 2016.04.11 |
스프링 JDBC 연동을 통한 쇼핑몰: 리스트, 세부항목 (0) | 2016.04.11 |
스프링 MVC로 게시판 구현: 상세, 입력 화면 (방법2: SimpleUrlHandlerMapping, 어노테이션) (0) | 2016.04.08 |