iBATIS笔记之概述

(一)目标和初衷

1. iBATIS的目标是:用少量的代码获得大量的数据访问功能

2. 初衷是让程序员将如下过程做的更好更简单:

Separating SQL code from programming code

将SQL代码从程序代码中分离

Passing input parameters to the library classes and extracting the output

对类库传递输入参数来提取输出结果

Separating data access classes from business logic classes

将数据访问从业务逻辑类中分离

Caching often-used data until it changes

将常用数据进行缓存,除非其发生变化

Managing transactions and threading

对数据交换和线程进行管理

 

(二)iBATIS映射工作流的描述

1.图示:

iBATIS DataMapper workflow

2.映射工作流的具体描述:

1)提供所需要的参数,可以是对象也可以是值类型。此参数用于在SQL语句或存储过程中设定一些运行时的值。也可在不必要的情况下省略此定义。

2)通过传递参数和定义在XML描述文件中的过程或声明的名称,来执行映射。框架会准备好SQL声明语句段,         或存储过程,用传入的参数设定所有运行时必需的值,执行后返回结果。

3)如果是update语句,已更改的行数会被返回,如果是一个查询语句,返回一个对象或一个对象集合。

(三)示例用法

1.XML描述文件部分:

<insert id="InsertLineItem" parameterClass="LineItem">
  INSERT INTO [LinesItem]
  (Order_Id, LineItem_LineNum, Item_Id, LineItem_Quantity, LineItem_UnitPrice)
  VALUES
  (#Order.Id#, #LineNumber#, #Item.Id#, #Quantity#, #Item.ListPrice#)
  <selectKey type="post" resultClass="int" property="Id" >
  select @@IDENTITY as value
  </selectKey>
</insert>

2.C#语句:

Mapper.Instance().Insert("InsertLineItem",lineItem);

ps1:若数据库可自动生成主键,通过如下语句执行插入语句,则主键值可被返回

int myKey=Mapper.Instance().Insert("InsertLineItem",lineItem);

ps2:描述文件中,<selectKey>部分规定了从数据库中返回自动生成的主键。

(四)如何确定是否应该使用iBATIS

1.iBATIS的角色是在一个对象的属性和数据库查询的列(包括存储过程)之间建立映射。如果项目是基于业务对象(包括Maps或IDictionary),则iBATIS是不错的选择。如果项目是分层架构的,以便业务层于用户接口层相互独立,iBATIS能发挥的更好,

2.使用OR/M更好的情况:

      Have complete control over your database implementation

      可以对数据库实现完全掌控

  Do not have a Database Administrator or SQL guru on the team

  队伍中没有DBA或者SQL大牛

  Need to model the problem domain outside the database as an object graph.

      需要在数据库外部,将问题域构建成图表对象形式

  使用iBATIS更好的情况:

         You do not have complete control over the database implementation, or want to continue to access a legacy database as it is being refactored.

         不能对数据库实现完全掌控,或希望在一个数据库被重构阶段依然能对其访问

         You have database administrators or SQL gurus on the team.

    队伍中有DBA或者SQL大牛

         The database is being used to model the problem domain, and the application's primary role is to help the client use the database model.

         数据库本身用来对问题域建模,而项目的主要角色是帮助客户使用数据库模型

 

posted @ 2016-03-14 13:21  大木水可  阅读(176)  评论(0编辑  收藏  举报