iBatis - 기본 설정
1. iBatis Library를 추가한다.
2. 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>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<!-- JNDI사용 -->
<transactionManager type="JDBC" >
<dataSource type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/XE"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/myhome/info/sql/SqlMap.xml" />
</sqlMapConfig>
/////////////////////////////////////////////////////////////////
위의 설정은 JNDI를 사용하기 때문에 JNDI설정을 해 주어야 한다.
1. Server 의 server.xml파일에 다음을 추가한다.
(33번째 줄 <GlobalNamingResources> 태그 안에 선언한다)
<Resource auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
maxActive="20"
maxIdle="10"
maxWait="-1"
name="jdbc/XE"
username="user01"
password="user01"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@localhost:1521:XE" />
2. Server 의 context.xml 파일의 가장 하단에 다음을 추가 한다.
<ResourceLink global="jdbc/XE"
name="jdbc/XE"
type="javax.sql.DataSource"/>
※JNDI말고 다른 방법으로 사용 할 수 있다. SqlMapConfig.xml 파일에 다음을 추가 한다.
1.simple datasource type 사용
<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:XE"/>
<property name="JDBC.Username" value="user01"/>
<property name="JDBC.Password" value="user01"/>
</dataSource>
</transactionManager>
2.DBCP datasource type 사용
<properties resource=" info/model/dao/db.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}"/>
<property name="JDBC.DefaultAutoCommit" value="true" />
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<property name="Pool.TimeToWait" value="500"/>
</dataSource>
</transactionManager>
////////////////////////////////////////////////////////////////
3.SqlMap.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>
<typeAlias alias="Info" type="com.myhome.info.dto.InfoDTO"/><!-- alias : 별칭을 잡겠다는 의미 -->
<insert id="infoInsert" parameterClass="Info"><!-- typeAlias한 Info를 넣는다 없으면 com.. 그대로 넣어도 된다. -->
INSERT INTO INFO
(NUM, NAME, SEX, TEL, WDATE)
VALUES
(NUMSEQ.NEXTVAL, #name#, #sex#, #tel#, #wdate#)<!-- ## Info 안에 가지는 프로퍼티 대소문자가 정확하게 맞아야 한다. -->
</insert>
<statement id="infoList" resultClass="Info">
SELECT NUM, NAME, SEX, TEL, WDATE
FROM INFO
</statement>
</sqlMap>
4.SQLManager.java 파일 생성
package com.myhome.manager;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public abstract class SQLManager {
private SqlMapClient sc = null;
public SQLManager(){
try{
sc = SqlMapClientBuilder.buildSqlMapClient(
Resources.getResourceAsReader(
"com/myhome/info/sql/SqlMapConfig.xml"));
}catch(java.io.IOException ie){
ie.printStackTrace();
}
}
public SqlMapClient getSqlMap(){
return sc;
}
}
5.DAO에서 다음과 같이 사용
package com.myhome.info.dao;
import com.myhome.info.dto.InfoDTO;
import com.myhome.manager.SQLManager;
import java.sql.SQLException;
import java.util.List;
public class InfoDAO extends SQLManager{
/*등록부분*/
public void register(InfoDTO dto) throws SQLException{
this.getSqlMap().insert("infoInsert",dto);
}
/*회원 리스트 부분*/
@SuppressWarnings("unchecked")
public List<InfoDTO> getAllQuery(){
List<InfoDTO> list = null;
try {
list = (List<InfoDTO>)this.getSqlMap().queryForList("infoList");
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}
☆SqlMapConfig.xml의 추가 사항
1.전체적인 내용
<?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>
<settings/>
<properties resource=" db.properties " />
<transactionManager></transactionManager>
<sqlMap></sqlMap>
</sqlMapConfig>
위에서 가장 중요한 것은 transactionManager 와 sqlMap부분이며 setting과 properties resource 는 선택 사항이다.
2. settings의 내용들
cacheModelsEnalbe ="true" : SqlMapClient를 위한 모든 캐쉬모델을 가능하게 하거나 가능하지 않게 한다.
이것은 디버깅시 도움이 된다.
enhancernetEnable="true" : 향상된 lazy로딩처럼 최적화된 자바빈즈 속성 접근을 위해 런타임시 바이트코드 향상을 가능하게 한다.
lazyLoadingEnabled="true" : SqlMapClient 를 위한 모든 lazy로딩ㅇ르 가능하게 하거나 가능하지 않게 한다.
maxRequests="32" : 한꺼번에 SQL을 실행할 스래드 수이고 2에n승으로 확장할 수 있고 128이 맥시멈이다.
maxSession="10" : 주어진 시간동안 활성화 될 수 있는 세션 수
maxTransaction="5" : 한꺼번에 SqlMapClient.startTransaction()에 들어갈 수 있는 스레드의 최대 갯수
useStatementNamespaces ="false"
3. db.properties 파일 설정
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=user01
password=mypwd