该笔记是通过学习《iBATIS In Action》和《iBATIS实战》归纳而来。
iBATIS系统学习笔记一
相关链接:
学习笔记零 - 起源
学习笔记二 - 基础配置
学习笔记三 - 高级技巧与进阶
学习笔记四 - 技巧与实践
2.1 iBATIS的SQL映射
一下是xml的映射:
<select id="getAddress" parameterClass="int" resultClass="Address">
SELECT
ADR_ID as id,
ADR_DESCRIPTION as description,
ADR_STREET as street,
ADR_CITY as city,
ADR_PROVINCE as province,
ADR_POSTAL_CODE as postalCode
FROM ADDRESS
WHERE ADR_ID = #id#
</select>
sql映射的输入输出关系:
2.2 iBATIS的代码执行:
java:
Address address = (Address) sqlMap.queryForObject("getAddress",
new Integer(5));
2.3 简单的例子
这里来尝试一个简单的iBATIS的例子:
2.3.1 数据库的创建
#
# Table structure for table 'user'
#
CREATE TABLE USER_ACCOUNT (
USERID INT(3) NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(10) NOT NULL,
PASSSWORD VARCHAR(30) NOT NULL,
GROUPNAME VARCHAR(10),
PRIMARY KEY (USERID)
);
#
# Data for table 'user'
#
INSERT INTO USER_ACCOUNT (USERNAME, PASSSWORD, GROUPNAME)
VALUES ('LMEADORS', 'PICKLE', 'EMPLOYEE');
INSERT INTO USER_ACCOUNT (USERNAME, PASSSWORD, GROUPNAME)
VALUES ('JDOE', 'TEST', 'EMPLOYEE');
COMMIT;
2.3.2 代码的书写
import com.ibatis.sqlmap.client.*;
import com.ibatis.common.resources.Resources;
import java.io.Reader;
import java.util.List;
public class Main {
public static void main(String arg[]) throws Exception {
String resource = "SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader (resource);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
List list = sqlMap.queryForList("getAllUsers", "EMPLOYEE");
System.out.println("Selected " + list.size() + " records.");
for(int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
}
}
2.3.3 iBATIS的配置
iBATIS链接数据库的配置文件:
<?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>
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/test"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="blah"/>
</dataSource>
</transactionManager>
<sqlMap resource="SqlMap.xml" />
</sqlMapConfig>
SQL映射:
<?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>
<select id="getAllUsers" parameterClass="string"
resultClass="hashmap">
SELECT * FROM USER_ACCOUNT WHERE GROUPNAME = #groupName#
</select>
</sqlMap>
2.3.4 添加iBATIS依赖包
我使用了maven工具,添加以下代码:
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
<dependency>
<groupId>com.ibatis</groupId>
<artifactId>ibatis2-common</artifactId>
<version>2.1.7.597</version>
</dependency>
如果依赖中没有jdbc的依赖包,那需要添加。
2.3.5 尝试运行
运行main后结果:
Selected 2 records.
{PASSSWORD=PICKLE, USERNAME=LMEADORS, GROUPNAME=EMPLOYEE, USERID=1}
{PASSSWORD=TEST, USERNAME=JDOE, GROUPNAME=EMPLOYEE, USERID=2}
2.4 iBATIS的未来方向
由于该文章已经过去了很多年,iBATIS甚至已经改名为MyBATIS,许多概念已不适用,故简单归纳。
2.4.1 iBATIS已经加入了Apache软件基金会
2.4.2 更简单、更小且依赖性更小
iBATIS是个目标非常集中的项目,所以期望能更小、更简单、更少的依赖第三方库。
这些将在MyBATIS学习中得到体现
2.4.3 更多的扩展点与插件
2.4.4 支持更多的平台和语言
2.5 小结
- iBATIS是一个独特的数据映射器,使用SQL映射而不是完全的O/RM映射。
- iBATIS的代码简单清晰明了,相对于JDBC更容易编写。
iBATIS的有点:
- 简单性
- 生产效率
- 性能
- 关注点分离
- 分工明确
- 可移植性