这两天自己看了点iBatis的资料,整理了下,这里只是写点iBatis的基本使用,比较基础,没用过的同学可以随便看下。 :)
介绍
iBATIS是以SQL为中心的持久化层框架,与一般的ORM框架不同。一般的ORM框架将数据库表、字段等映射到类、属性,那是一种元数据(meta-data)映射,而iBatis则是将类与SQL做CRUD操作所需的参数,以及最后的SQL处理结果做映射。相当于把SQL做为一个中间平台, where 后面的条件参数做输入,执行结果就是输出,然后实现POJO对象与输入输出的映射。
当然iBatis所做的映射不仅仅局限于POJO对象,还可以是Map对象以及XML数据。如下图所示:
简答示例
该示例在Eclipse环境下使用iBatis来实现一个User类的CRUD操作,具体实现步骤如下:
1. 新建一个Java Project, 导入iBatis所依赖的相应jar包,包括: ibatis-2.3.0.677.jar 以及 mysql 的驱动包 mysql-connector-java-5.1.6-ben.jar
2. 在类路径的根目录(src所在目录)下新建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>
<transactionManager type = "JDBC">
<!-- 与数据库连接相关的 DataSource 配置 -->
<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 = "admin" />
</dataSource>
</transactionManager>
<!-- User 类 CRUD 处理的配置文件-->
<sqlMap resource = "com/shine/ibatis/User.xml" />
</sqlMapConfig>
2. src下创建一个package: com.rigel.ibatis
新建User类:
package com.rigel.ibatis; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = -1134992928537968033L; private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
在同目录下新建 User 类的CRUD处理的配置文件: User.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 namespace="User">
<!-- User类别名设置 -->
<typeAlias alias="User" type="com.rigel.ibatis.User"/>
<!-- 查询数据库中 t_user 表中所有User信息,返回的是List<User> -->
<select id="getAllUsers" resultClass="User">
select * from t_user
</select>
<!-- 查询特定User,输入参数类型为 Integer, 返回User类 -->
<select id = "getUser" resultClass = "User" parameterClass = "Integer" >
select * from t_user where id = #id#
</select>
<!-- 更新User信息 ,输入的参数是个User类-->
<update id = "updateUser" parameterClass = "User" >
update t_user set name = #name#, age = #age#
where id = #id#
</update>
<!-- 插入一个User -->
<insert id = "insertUser" parameterClass = "User">
insert into t_user values(#id#, #name#, #age#)
</insert>
<!-- 删除User -->
<delete id = "deleteUser" parameterClass = "Integer">
delete from t_user where id = #id#;
</delete>
</sqlMap>
3. 新建测试类 IbatisTest
这些配置好,就完成了User类基本CRUD操作中输入参数,输出数据与User类得Mapping,接下来需要搭建与 User类相匹配的数据库环境;
从 sqlMapConfig.xml 配置文件可以看出,我们使用的是MySQL数据库,新建的Database名为“test”,而从User.xml配置文件中知道,与User类对应的表为 "t_user",该表有三个字段“id”、“name”、“age”。
搭建好数据库环境后,新建测试类 “IbatisTest”
package com.shine.ibatis;
import java.io.Reader;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class UserTest {
public static void main(String[] args) throws Exception{
// 读入配置文件,初始化好 SqlMapClient
Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");
SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
// 查询所有User
List<User> users = client.queryForList("getAllUsers");
for(User user : users)
System.out.println("User: " + user.getName());
// 查询特定User
User user = (User)client.queryForObject("getUser", 10);
System.out.println("id = 1 的User: " + user.getName());
// 插入User
user = new User();
user.setId(3);
user.setName("yiping");
user.setAge(27);
client.insert("insertUser", user);
// 删除User
client.delete("deleteUser", 10);
System.out.println("ok");
}
}
运行该测试类,查看具体运行结果。