iBatis是一款使用方便的数据访问工具,也可作为数据持久层的框架。和ORM框架(如Hibernate)将数据库表直接映射为Java对象相比,iBatis是将SQL语句映射为Java对象。相对于全自动SQL的Hibernate,iBatis允许你对SQL有完全控制权,可以视为半自动的数据访问工具。
iBatis的最大优点是简便,轻量级,仅需iBatis的一个jar和数据库的驱动即可运行,而且使用iBatis仅需掌握SQL和XML的用法即可,而不像Hibernate那样需要配置对象间的关系。学习iBatis的过程要比Hibernate快很多,在项目中,若人员水平不大一致时,使用iBatis代替Hibernate作为数据访问工具可以有效提升开发效率。
项目结构
[img]http://dl.iteye.com/upload/attachment/0073/1198/67a251ad-f6c1-3c11-81bc-6421a7ec698b.jpg[/img]
数据库用的Oracle scott账户下的Dept表
模型类
模型配置文件 Dept.xml
数据库配置文件jdbc.properties
iBatis配置文件SqlMapConfig.xml
测试类:
输出结果:
deptNo : 88dname : 装备部loc : 北京
deptNo : 99dname : 交通部loc : null
deptNo : 55dname : Advloc : Beijing
deptNo : 56dname : Secloc : Shanghai
deptNo : 10dname : ACCOUNTINGloc : NEW YORK
deptNo : 20dname : RESEARCHloc : DALLAS
deptNo : 30dname : SALESloc : CHICAGO
deptNo : 40dname : OPERATIONSloc : BOSTON
iBatis的最大优点是简便,轻量级,仅需iBatis的一个jar和数据库的驱动即可运行,而且使用iBatis仅需掌握SQL和XML的用法即可,而不像Hibernate那样需要配置对象间的关系。学习iBatis的过程要比Hibernate快很多,在项目中,若人员水平不大一致时,使用iBatis代替Hibernate作为数据访问工具可以有效提升开发效率。
项目结构
[img]http://dl.iteye.com/upload/attachment/0073/1198/67a251ad-f6c1-3c11-81bc-6421a7ec698b.jpg[/img]
数据库用的Oracle scott账户下的Dept表
模型类
package ibatis.model;
public class Dept {
private int deptNo;
private String dName;
private String loc;
public int getDeptNo() {
return deptNo;
}
public void setDeptNo(int deptNo) {
this.deptNo = deptNo;
}
public String getDName() {
return dName;
}
public void setDName(String name) {
dName = name;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public String toString() {
return "deptNo : " + deptNo + " dname : " + dName + " loc : " + loc;
}
}
模型配置文件 Dept.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="Dept" type="ibatis.model.Dept" />
<select id="getAllDepts" resultClass="Dept">
select *
from dept
</select>
</sqlMap>
数据库配置文件jdbc.properties
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.username=scott
jdbc.password=tiger
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>
<properties resource="jdbc.properties" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${jdbc.driverClassName}" />
<property name="JDBC.ConnectionURL" value="${jdbc.url}" />
<property name="JDBC.Username" value="${jdbc.username}" />
<property name="JDBC.Password" value="${jdbc.password}" />
</dataSource>
</transactionManager>
<sqlMap resource="ibatis/resources/Dept.xml" />
</sqlMapConfig>
测试类:
package ibatis;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import ibatis.model.Dept;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class IBatisDemo {
public static void main(String[] args) throws IOException, SQLException {
String config = "ibatis/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(config);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
List<Dept> list = sqlMap.queryForList("getAllDepts");
for (Dept dept : list) {
System.out.println(dept);
}
}
}
输出结果:
deptNo : 88dname : 装备部loc : 北京
deptNo : 99dname : 交通部loc : null
deptNo : 55dname : Advloc : Beijing
deptNo : 56dname : Secloc : Shanghai
deptNo : 10dname : ACCOUNTINGloc : NEW YORK
deptNo : 20dname : RESEARCHloc : DALLAS
deptNo : 30dname : SALESloc : CHICAGO
deptNo : 40dname : OPERATIONSloc : BOSTON