博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

iBATIS for .Net

Posted on 2008-04-01 09:57  codingsilence  阅读(524)  评论(0编辑  收藏  举报
1、我们有一张用户信息表PERSON,结构如下:
字段名
类型
长度
PER_ID
Long Integer
4
PER_FIRST_NAME
Text
40
PER_LAST_NAME
Text
40
PER_BIRTH_DATE
Date/Time
8
PER_WEIGHT_KG
Double
8
PER_HEIGHT_M
Double
8
把此表保存到Access文件iBatisTutorial.mdb中。
2、我们希望获取一个用户列表。所以先编写如下的单元测试(PersonTest.cs):
using System.Collections;
using NUnit.Framework;
 
namespace GoldenWater.QuickStart
{
     [TestFixture]
     public class PersonTest
     {
         [Test]
         public void PersonList()
         {
              PersonHelper ph = new PersonHelper();
              // try it
              IList people = ph.SelectAll();
 
              // test it
              Assert.IsNotNull (people, "Person list not returned");
              Assert.IsTrue (people.Count > 0, "Person list is empty");
              Person person = (Person) people[0];
              Assert.IsNotNull (person, "Person not returned");
         }
     }
}
 
 
3、为了让上面的单元测试正常运行,我们需要编写一个Person对象。代码如下(Person.cs):
using System;
 
namespace GoldenWater.QuickStart
{
     public class Person
     {
         private int _Id;
         public int Id
         {
              get { return _Id; }
              set { _Id = value; }
         }
 
         private string _FirstName;
         public string FirstName
         {
              get { return _FirstName; }
              set { _FirstName = value; }
         }
 
         private string _LastName;
         public string LastName
         {
              get { return _LastName; }
              set { _LastName = value; }
         }
 
         private DateTime _BirthDate;
         public DateTime BirthDate
         {
              get { return _BirthDate; }
              set { _BirthDate = value; }
         }
 
         private double _WeightInKilograms;
         public double WeightInKilograms
         {
              get { return _WeightInKilograms; }
              set { _WeightInKilograms = value; }
         }
 
         private double _HeightInMeters;
         public double HeightInMeters
         {
              get { return _HeightInMeters; }
              set { _HeightInMeters = value; }
         }
 
     }
}
 
我们还需要一个PersonHelper类(PersonHelper.cs):
using System;
using System.Collections;
using IBatisNet.DataMapper;
 
namespace GoldenWater.QuickStart
{
     public class PersonHelper
     {
         private SqlMapper mapper ;
 
         public PersonHelper()
         {
              mapper = IBatisNet.DataMapper.Mapper.Instance();
         }
 
         public IList SelectAll ()
         {
              return mapper.QueryForList ("Select", null);
         }
     }
}
 
好,到这里,所有需要编写的代码就都完成了!不过,要想让代码运行起来的话,我们还得再做些工作。
4、编写映射配置文件。
我们使用XML元素来把一条数据库语句映射到一个应用对象。
配置文件(PersonHelper.xml)内容如下:
<?xmlversion="1.0"encoding="UTF-8"?>
 
<sqlMapnamespace="Account"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:næNamespaceSchemaLocation="SqlMap.xsd">
 
     <alias>
         <typeAliasalias="Person"type="GoldenWater.QuickStart.Person, GoldenWater.QuickStart"/>
     </alias>
    
     <resultMaps>
         <resultMapid="SelectResult"class="Person">
              <resultproperty="Id"cælumn="PER_ID"/>
              <resultproperty="FirstName"cælumn="PER_FIRST_NAME"/>
              <resultproperty="LastName"cælumn="PER_LAST_NAME"/>
              <resultproperty="BirthDate"cælumn="PER_BIRTH_DATE"/>
              <resultproperty="WeightInKilograms"cælumn="PER_WEIGHT_KG"/>
              <resultproperty="HeightInMeters"cælumn="PER_HEIGHT_M"/>
         </resultMap>
     </resultMaps>
    
     <statements>
    
         <selectid="Select"parameterClass="int"resultMap="SelectResult">
              select
              PER_ID,
              PER_FIRST_NAME,
              PER_LAST_NAME,
              PER_BIRTH_DATE,
              PER_WEIGHT_KG,
              PER_HEIGHT_M
              from PERSON
              <dynamicprepend="WHERE">
                   <isParameterPresent>
                       PER_ID = #value#
                   </isParameterPresent>
              </dynamic>
         </select>
 
        
     </statements>
    
</sqlMap>
 
5、SqlMap.config文件。此配置文件指定了iBatis使用的数据库连接配置信息和应用程序中的映射配置文件所在的位置信息及其它一些配置项。
<?xmlversion="1.0"encoding="utf-8"?>
<sqlMapConfigxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:næNamespaceSchemaLocation="SqlMapConfig.xsd">
     <settings>
         <settinguseStatementNamespaces="false"/>
         <settingcacheModelsEnabled="true"/>
     </settings>
             
     <database>   
         <providername="OleDb1.1"/>
         <dataSourcename="iBatisTutorial" 
         cænnectionString="Provider=Micros€u102 ?t.Jet.OLEDB.4.0;Data Source=http://www.cnblogs.com/Resources/iBatisTutorial.mdb"/>
     </database>
 
     <sqlMaps>
         <sqlMapresource="http://www.cnblogs.com/Resources/PersonHelper.xml"/>
     </sqlMaps>
    
</sqlMapConfig>
 
 
 
6、providers.config配置文件。
这个文件是数据库访问方式的配置文件。SqlMap.config文件中的“<providername="OleDb1.1"/>这一行中的“OleDB1.1”就是在此文件中定义的。我们可以事先在此文件中定义好针对不同类型的数据库的访问配置项,在SqlMap.config文件中只需要指定配置项的名称,再提供数据库连接字符串即可。
7、所有需要的文件都已经准备好了,项目目录结构如下:
QuickStart
|-Recources
||-iBatisTutorial.mdb
||-PersonHelper.xml
|-Person.cs
|-PersonHelper.cs
|-PersonTest.cs
|-providers.config
|-SqlMap.config
8、下面我们要做的事就是编译,然后在Nunit中运行单元测试,检验代码是否能通过单元测试。