shine_cn

Your heart is free, so have the courage to follow it.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

iBatis 学习

Posted on 2011-06-12 14:59  shine_cn  阅读(413)  评论(0编辑  收藏  举报

这两天自己看了点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");

}

}

运行该测试类,查看具体运行结果。