iBatis的最大优点是简便,轻量级,仅需iBatis的一个jar和数据库的驱动即可运行,而且使用iBatis仅需掌握SQL和XML的用法即可,而不像Hibernate那样需要配置对象间的关系。学习iBatis的过程要比Hibernate快很多,在项目中,若人员水平不大一致时,使用iBatis代替Hibernate作为数据访问工具可以有效提升开发效率。
项目结构
数据库用的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