IbatisNet的介绍和使用

为什么需要IbatisNet??

我们先假定几个过去和现在使用ADO.NET操作数据库的场景

1 场景一 我们很难将操作数据库的sql语句从代码中分离,在著名的petshop3.0等例子也使用数据访问层将sql集中到一起,为此当我们改变sql语句不得不重新编译整个项目的代码

2 场景二 我们很难将实际的外观层,业务逻辑层和数据访问层分离,举例,你通过查询语句”Select A.Name,B.Qty from  Cart A ,CartQty B where A.ID=B.ID” ,你在界面进行数据绑定时写下入下代码

<asp:BoundColumn DataField="Name" HeaderText="First"></asp:BoundColumn>

现在,根据查询语句发生变化”Select C.Code,B.Qty from  Cart2 C ,CartQty B where C.ID=B.ID”,我们不得不重新编写外界的代码或者写含有别名的sql语句

IbatisNet解决问题

iBATIS DataMapper通过使用XML文档在sql语句和实体对象之间建立映射。

基本的步骤如下:

1) 提供一个参数,无论是对象还是一个Native类型。参数将用于设置sql语句或存储过程在运行时的值,如果运行时不需要参数,将忽略参数

2) 通过传送参数和在你的xml配制中的声明名字或者存储过程来执行映射。这一步将是魔术般的步骤。框架将会准备sql声明或者存储过程,用你的参数设置运行时数据值,执行sql语句或者存储过程,返回结果。

3) 在更新的时候,更新的行数将会被返回。在查询的时候,返回的将是一个对象或者对象的集合。结果对象,可以是一个plan-old对象或者native类型。

 

上面的过程在代码中的实现

 

你可以这样写一条语句就将你在界面上建立的实体类插入数据库

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

// lineItem 是一个实体类的对象

你需要配制一个InsertLineItem.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>

如果你需要获得多行或者单行的数据,你可以这样在外界调用

IList productList = Mapper.Instance().QueryForList("selectProduct",categoryKey);

Product product = Mapper.Instance().QueryForObject("SelectProduct",productKey) as Product;

IbatisNet的配制文件介绍

1        providers.config 提供配制 常用的数据库连接程序 xml文件

2        SqlMap.xml  SQL语句执行结果和实体对象之间的映射文件,在系统中将出现多个这样的文件

3        SqlMap.config – 决定在运行时加载sqlmap.xmlproviders.config的文件

IbatisNet的使用

创建表Person

为了测试方便,我把Person放在了Northwind表中

Name              Type            Size

PER_ID            Long Integer      4   not null

PER_FIRST_NAME    nvarchar         40  not null

PER_LAST_NAME     nvarchar           40  not null

PER_BIRTH_DATE    DateTime         8

PER_WEIGHT_KG     float            8

PER_HEIGHT_M      float            8

 

CREATE TABLE [dbo].[Person] (

       [PER_ID] [int] IDENTITY (1, 1) NOT NULL ,

       [PER_FIRST_NAME] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

       [PER_LAST_NAME] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,

       [PER_BIRTH_DATE] [datetime] NULL ,

       [PER_WEIGHT_KG] [float] NULL ,

       [PER_HEIGHT_M] [float] NULL

) ON [PRIMARY]

 

增加配制文件注意地方:所有配制文件都去看看其官方的文档为准

Person.xml

    properties.config

    sqlmap.config

    Person.xml中插入的语句配制

<insert id="Insert" parameterClass="Person">

          <selectKey property="Id" type="post" resultClass="int">select @@IDENTITY as value</selectKey> 

              insert into PERSON

                   ( PER_FIRST_NAME, PER_LAST_NAME,

                   PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M)

              values

                   ( #FirstName#, #LastName#,_par                 #BirthDate#, #WeightInKilograms#, #HeightInMeters#)

     </insert>

properties.config中的数据连接配置

如果遇到问题,最好先看其说明文档,再通过单步调试。

2        定义Helper.cs 返回一个SqlMapper SQL映射类

public abstract class Helper

     {       

         public SqlMapper Mapper ()

         {

              return IBatisNet.DataMapper.Mapper.Instance ();

         }

     }

继续编写代码,形成最后项目IbatisTest

 

如果使用IbatisNet对里面的几个配制文件应该十分熟悉


转载于:https://my.oschina.net/u/555747/blog/301515

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值