출처: http://beans.tistory.com/37
iBATIS in action에서 iBATIS는 "SQL 실행 결과를 자바빈즈 혹은 Map 객체에 매핑해주는 퍼시스턴스 솔루션으로 SQL을 소스 코드가 아닌 XML로 따로 분리해 관리하여 지겨운 SQL 문자열 더하기에서 해방시켜 줍니다. 또한 XML에서 동적 SQL 요소를 사용하여 쿼리 문장을 프로그래밍 코딩 없이 자유롭게 변환할 수 있게 해줍니다. 이러한 접근방식으로 인해 iBATIS를 사용하면 JDBC를 사용할 때보다 약 60% 정도의 코드만으로 프로그램 작성이 가능하다" 라고 한다.
말로만 하면 뭔소리인지 모르겠으니 간단한 예제 정도를 들어보자.
import! javax.sql.*;
import! java.sql.*;
public class Employee {
public Account getAccount(int id) throws SQLException, NamingException{
Account account = null;
String sql = "select * from employee where id= ?";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Context ctx = new InitialContext();
DataSource ds =
(DataSource)ctx.lookup(
"java:comp/env/jdbc/TestDB");
conn = ds.getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
while( rs.next()){
account = new Account();
account.setId(rs.getInt("ID"));
}
} finally {
try {
if ( rs != null ) rs.close();
} finally {
try {
if (ps != null) ps.close();
} finally {
if (conn != null) ps.close();
}
}
}
return account;
}
}
<select id="getAcount" resultClass="Acount" parameterClass="java.lang.Integer">
select * from employee where id= #id#
</select>
java
Acount act = (Acount) sqlMap.queryForObject("getAcount",new Integer(5));
이것만 쓰겠다. -_-;;
iBATIS 의 목표와 특징은 몇마디로 짧게정의하다면,
sql문과 java코드와의 분리만으로도 java개발자는 쿼리문을 신경쓰지 않아도 된다. sql문이 변경되더라도,
파라미터 값만 변경되지 않는다면, java소스에서는 수정할 부분이 없다.
[ ibatis 설치 & 이클립스를 이용한 DB연동 ]
1. 우선 iBATIS 를 다운받습니다.
2. 다운을 풀고, /lib 폴더에 ibatis-2.3.4.726 를 톰캣의 lib폴더나
프로젝트의 web-inf/lib 폴더에 넣습니다.
- /톰캣/lib/ (톰캣6버전)
3. example 폴더를 타고 들어가보면 sqlMapConfi.xml 파일이 있습니다. 이파일을 복사해서
붙여넣기 하셔도 되고,
src폴더에서 새로 xml 파일을 만드셔도 됩니다.<?xml version="1.0" encoding="UTF-8" ?>
4. 자바빈즈를 생성합니다.
package db;
public class Account {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
5. XML을 생성합니다.
우리가 사용할 쿼리를 작성하는 XML입니다.
다음값을 이용하여 쿼리와 맵핑합니다.
package db;
import! com.ibatis.sqlmap.client.SqlMapClient;
import! com.ibatis.sqlmap.client.SqlMapClientBuilder;
import! com.ibatis.common.resources.Resources;
import! java.io.Reader;
import! java.io.IOException;
import! java.sql.SQLException;
public class SimpleExample {
private static SqlMapClient sqlMapper;
static {
try {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
// Fail fast.
throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
}
}
public static Account getAcount() throws SQLException {
return (Account)sqlMapper.queryForObject("getAcount","ahm");
// 이부분에서 쿼리를 실행한다. queryForObject는 한개의 데이터를 가져올? 사용하는 메소드이다.
}
public static void main(String[] args){
try {
Account temp = getAcount();
System.out.println(temp.getId());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[ JNDI 설정 ]
sqlMapClient.xml 설정파일에서
<!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="50"
maxSessions="25"
maxTransactions="10"
useStatementNamespaces="false"
/>
<!--Type aliases allow you to use a shorter name for long fully qualified class names. -->
<typeAlias alias="order" type="testdomain.Order"/>
<!-- 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="JNDI">
<property name="DataSource" value="java:/comp/env/jdbc/DB"/>
</dataSource>
</transactionManager>
<!--sqlMap resource="C:\LuckyData\Project\Java1.5\data\ibatis\Member.xml"/-->
<sqlMap resource="board/board.xml"/>
<sqlMap resource="login/login.xml"/>
<sqlMap resource="db/dbChange.xml"/>
<sqlMap resource="statics/static.xml"/>
<!-- List more here...
<sqlMap resource="com/mydomain/data/Order.xml"/>
<sqlMap resource="com/mydomain/data/Documents.xml"/>
-->
</sqlMapConfig>
빨간색 부분처럼 바꿔준다. JNDI 물론 톰캣 SERVER.XML에 설정이 되있어야 겠다.
SERVER.XML
<Resource name="jdbc/IMARC" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@XXX.XXX.XXX.X:XXX:XXXX"
username="XXXX" password="XXXX maxActive="20" maxIdle="10" maxWait="10000" />
</Context>
각자 설정에 알맞게 바꿔야겠죠? ^^
'IT_Programming > Dev Tools' 카테고리의 다른 글
[펌] 비주얼 스튜디오 2008 (9.0) + 에디트플러스 연동 방법 (0) | 2009.07.01 |
---|---|
[펌] Apache(아파치)와 Tomcat(톰캣)을 Eclipse(이클립스)에 연동하기 (0) | 2009.04.12 |
[펌] JDK 5.0 + Tomcat 이클립스 개발환경에서 Struts (1.3.8) 설치 하기 (0) | 2009.03.20 |
[Eclipse] Aptana plugin을 사용해보자. (0) | 2009.03.19 |
[펌] TPTP+WTP 자바 웹 애플리케이션 성능 테스트 (0) | 2009.02.16 |