现在的位置: 首页 > 综合 > 正文

iBATIS介绍及简单示例

2013年11月13日 ⁄ 综合 ⁄ 共 10692字 ⁄ 字号 评论关闭

介绍
iBATIS是以SQL为中心的持久化层框架。能支持懒加载、关联查询、继承等特性。

iBATIS不同于一般的OR映射框架。OR映射框架,将数据库表、字段等映射到类、属性,那是一种元数据(meta-data)映射。iBATIS则是将SQL查询的参数和结果集映射到类。

 

所以,iBATIS做的是SQL Mapping的工作。

 

它把SQL语句看成输入以及输出,结果集就是输出,而where后面的条件参数则是输入。iBATIS能将输入的普通POJO对象、Map、XML等映射到SQL的条件参数上,同时也可以将查询结果映射到普通POJO对象(集合)、Map、XML等上面。

 

iBATIS使用xml文件来映射这些输入以及输出。

 

简单示例
基于ibatis-2.3.0.677版本。

1、  创建新的项目,并引入jar包

a)         ibatis-2.3.0.677.jar

b)        mysql驱动

2、  在类路径中提供ibatis的配置文件:sqlMapConfig.xml

  
 

 

3、创建实体类:User.java

 
 

 

4、创建针对User对象的CRUD的xml映射配置:User.xml

 
 

 

5、创建测试程序测试:

 

 
 

 

SqlMapClient对象
这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。这个类是我们使用iBATIS的最主要的类。它是线程安全的。通常,将它定义为单例。(与hibernate中sessionFactory的定义类似)。如:

 

How To
如何获得刚插入记录的自增长ID值?
   
 
         

 

parameterClass的使用
   
 

 

insertUser使用了parameterClass,所以必需传入User类型的对象

         

 

insertUser2没有使用parameterClass,所以可以传入任意具有相应属性值的对象

         

 

parameterMap的使用
    

 

parameterMap用于传入参数,以便匹配SQL语句中的?号

         

 

利用parameterMap,可以定义参数对象的属性如何映射到SQL查询语句的动态参数上,注意parameterMap中<parameter/>标签的先后顺序不能颠倒!

 

如何将查询结果映射到不同的对象?(resultClass的使用)
    

 

       //查找t_user表,将其结果映射到一个属性名不同的对象中!

        
 

 

 

如何将查询结果集映射到不同的对象?(resultMap的基本使用)
 

 

 

        
 

 

如何将查询结果集映射为xml格式的数据?
 

 

 

      

 

如何用Map类型的对象作为传入参数?
   
 

 

      

 

如何将查询结果集的元素转换为Map类型的对象?
   
 

 

      

 

 

 

 

事务处理
可以使用sqlMapClient的startTransaction/commitTransaction/endTransaction等方法来控制事务的边界。

 

如果与spring整合(这是iBatis推荐的方式),则我们需要在spring配置文件中指定其事务特性。

 

 

与spring集成
Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。

 

与hibernate类似,Spring 提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClientTemplate对象来操纵数据库。看起来这些概念都与hibernate类似。

 

通过SqlMapClientTemplate来操纵数据库的CRUD是没有问题的,这里面关键的问题是事务处理。Spring提供了强大的声明式事务处理的功能,我们已经清楚hibernate中如何配置声明式的事务,那么在iBATIS中如何获得声明式事务的能力呢?

 

第一,我们需要了解的是spring通过AOP来拦截方法的调用,从而在这些方法上面添加声明式事务处理的能力。典型配置如下:

   

这些事务都是声明在业务逻辑层的对象上的。

 

 

第二,我们需要一个事务管理器,对事务进行管理。

     
 

 

此后,我们需要让spring来管理SqlMapClient对象:

     
 

 

我们的DAO的编写:

 

继承SqlMapClientDaoSupport,要求我们注入SqlMapClient对象,因此,需要有如下的DAO配置:

 
 

 

这就是所有需要注意的问题了,此后就可以在业务逻辑层调用DAO对象了!

抱歉!评论已关闭.