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

ibatis.net实例详解

2012年12月19日 ⁄ 综合 ⁄ 共 8975字 ⁄ 字号 评论关闭
1、认识配置文件

SqlMap.config:


<?xmlversion="1.0"encoding="utf-8"?>
<sqlMapConfigxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="SqlMapConfig.xsd">
<!--以上为固定格式,从这里开始以下是用户配置项    -->
     <propertiesresource="DataBase.config"/><!-- 指定一个属性源,相当与设置一些属性变量,该文件请查看下面   -->
     <settings>
<!-- 当该选项为true时,你在调用指定的映射时你总是必须给出完整的名称例如:queryForObject(“Namespace.statement.Id”);    -->
          <settinguseStatementNamespaces="false"/>
<!-- 该选项指示是否使用缓存,默认为true -->
          <settingcacheModelsEnabled="true"/>
     </settings>
    
     <!--指定数据源
${datasource} ${database} ${userid} ${password} DataBase.config定义的值
-->
     <database>
               <providername="sqlServer1.1"/>
          <dataSourcename="mydb"connectionString="data source=${datasource};database=${database};user id=${userid};password=${password};min pool size=1; max pool size=50"/>
          </database>
 
<!--指定映射的文件的位置    -->
     <sqlMaps>
          <sqlMapresource="xml/ItemList.xml"/>
          <sqlMapresource="xml/XiangMuBiao.xml"/>
     </sqlMaps>
    
</sqlMapConfig>


明:该文件为IBatis.net默认的配置文件,不能缺少,当然可以不必是Sql.config,但是如果改为其他的名字的话需要在前台代码中说明,请
参考下面的内容providers.config:该文件必须存在,并且不能改变它的文件名,该文件描述了如何连接数据库,无须配置

DataBase.config:自定义配置文件

<?xmlversion="1.0"encoding="utf-8"?>
<settings>
    
     <!--  定义4个属性,在SqlMap.config中调用 -->
     <addkey="userid"value="sa"/>
     <addkey="password"value="123456"/>
     <addkey="database"value="TouPiao"/>
     <addkey="datasource"value="(local)"/>
</settings>

 


2、使用IBatis之映射XML文件
假设将数据库中名为ItemList的表映射到Asp.Net中的ItemList类,那么XML映射文件如下(映射文件的文件的说明请查看注释说明)

<?xmlversion="1.0"encoding="utf-8"?>

<sqlMapnamespace="ItemList"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="SqlMap.xsd">
     <alias><!-- alias:取别名
                    assembly:表示类所在的文件
                    type:表示该类的完整的名称
      -->
          <typeAliasalias="ItemList"assembly="TouPiao.dll"type="TouPiao.DataAccess.ItemList"/>
          <typeAliasalias="XiangMuBiao"assembly="TouPiao.dll"type="TouPiao.DataAccess.XiangMuBiao"/>
     </alias>
     <!--
          resultMaps:
               resultMaps用于返回值时进行ORM
         
          resultMap:
               其中每个resultMap对应一个ORM
               id:表示名称
               class:表示对应的类的别名根据<alias>标签中的定义
              
          result:
               property表示类中的属性
               column表示数据库中对应的字段
         
     -->
     <resultMaps>
          <resultMapid="ItemResult"class="ItemList">
               <resultproperty="ID"column="ID"/>
               <resultproperty="ItemText"column="ItemText"nullValue="没有选项"/>
               <resultproperty="pID"column="pID"/>
               <resultproperty="tCount"column="tCount"nullValue="-1"/>
          </resultMap>
     </resultMaps>
    
     <!--
          parameterMap:
               id:表示名称,不能少
               其他的参数可以不写,例如 class
          parameter:
               property:表示类中的属性,不能少,并且应用在存储过程中的时候,必须按照参数的位置
               其他参数可以省略:
               column:数据库中的字段
               direction:参数的传递方式 Input|Output|InputOutput
               dbType:数据库中的字段的类型
               type:类的属性的类型,可能要写成CLR形式,例如int类型应该写成System.Int32
               nullValue:空值转换,将空值转换成指定的值,以便防止某些类型不支持NULL的类型出错,例如int double等,注意:
                              1.只能转换成与property类型相一致的值
                              2.空不代表"",而是NULL
                              3.当该属性的类型匹配一个代替空值的值的时候(例如:-9999),更新字段的时候,空值将代替这个值被写入数据库,即nullValue指定的值不被写入数据库
               size:数据库中字段的大小,设置字段中的数据的最大值
               precision:数据库中字段的精度,设置当该字段映射到类的对应的属性时的精度
              
     -->
     <parameterMaps>
          <parameterMapid="AddNewItemParam"><!--AddNewItem的参数列表-->
               <parameterproperty="ItemText"/>
               <patameterproperty="pID"/>
          </parameterMap>
          <!--DelItem参数列表 -->
          <parameterMapid="DelItemMap">
               <parameterproperty="value"/>
          </parameterMap>
         
          <parameterMapid="UpdateItemMap">
               <parameterproperty="ID"column="ID"/>
               <parameterproperty="ItemText"column="ItemText"/>
               <parameterproperty="tCount"column="tCount"/>
          </parameterMap>
         
          <parameterMapid="AddItemCountMap">
               <parameterproperty="value"/>
          </parameterMap>
         
          <patameterMapid="AddNewXiangMuMap">
               <parameterproperty="Title"/>
               <patameterproperty="IsMul"/>
          </patameterMap>
     </parameterMaps>
    
     <!--
          statements:语句的集合
               <statement>
签可以替代<select>,<procedure>
,<delete>,<update>,<insert>,并且可以通过SqlMapper的delete
update insert方法以及所有关于查询的方法执行
               <select>:可以通过SqlMapper的所有关于查询的方法执行
               <delete> <insert> <update>:可以通过SqlMapper的 delete update insert方法执行
              
          <delete> <insert> <update> <statement> <select> <procedure>:
               id:该语句的标识
               resultMap:只有<select> <statement>才有,用于将结果映射到相应的字段,该属性不能少
               parameterMap:用于<procedure>的时候不能缺少,并且对应的parameterMap的<parameter>的property的顺序必须和存储过程的参数的顺序一致
               parameterClass:可以省略,将使用调用时传进来的类型进行调用
                                   注意:
                                        <select id="GetItemsByID"  resultMap="ItemResult">
                                             select * from ItemList where pID=#ID#
                                        </select>
                                        当调用时使用
                                       
                                        sqlMapper.QueryForList("GetItemByID",1)   //这时候#ID#的直就是1
                                       
                                        sqlMapper.QueryForList("GetItemByUD",ItemClass) //假设ItemClass包含一个ID字段,和name字段,那么这时候#ID#的值就是ItemClass.ID的值
                                       
     -->
     <statements>
          <!-- 使用Sql语句,通过项目ID获得该项目的所有选项
          注意:
               该标签没有指定parameterMap或者parameterClass,将根据前台调用时指定的对象作为参数,如果前台传进来的是一个原始对象例如:int string 等那么#ID#就是
          该参数的值
               如果传进来的是一个类的对象,假设该类包含两个属性(name,ID)
          那么#ID#就代表该对象的ID属性,由于name属性没有被用到,因此被忽略
               如果需要传进两个参数(不是某个对象的属性),那么必须将包含这两个键值的Hashtable对象作为参数传进来
           -->
          <selectid="GetItemsByID"  resultMap="ItemResult">
               select * from ItemList where pID=#ID#
          </select>
          <selectid="GetItemsByIDAndDate"  resultMap="ItemResult">
               select * from ItemList where pID=#ID# and isvis=#ISVIS#
          </select>
         
          <!--调用一个存储过程,增加一个选项 存储过程必须指定 parameterMap,如果有返回值的话必须指定 resultMap-->
          <procedureid="AddNewItem"parameterMap="AddNewItemParam">
               AddNewItem
          </procedure>
         
          <!--调用一个存储过程,删除一个选项 -->
          <procedureid="DelItem"parameterMap="DelItemMap">
               DelItem
          </procedure>
          <!--调用一个存储过程,更新一个选项 -->
          <procedureid="UpdateItem"parameterMap="UpdateItemMap">
               UpdateItem
          </procedure>
          <!--调用一个存储过程,更新一个选项的值 -->
          <procedureid="AddItemCount"parameterMap="AddItemCountMap">
               AddItemCount
          </procedure>
     </statements>
</sqlMap>

3、开始使用IBatis.net

//GetSqlMapper.cs
using System;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
namespace TouPiao.DataAccess
{
     ///<summary>
     /// 该类返回一个SqlMapper一个SqlMapper对应一个SqlMap.config配置文件
     ///</summary>
     public class GetSqlMapper
     {
         public SqlMapper GetMapper()
         {
              DomSqlMapBuilder d=new DomSqlMapBuilder();//初始化一个DomSqlMapBuilder
              SqlMapper sm=d.Configure("SqlMap.config");//调用Configure方法并指定配置文件的名称,返回一个SqlMapper
              //SqlMapper sm=Mapper.Get();       
             // SqlMapper sm=Mapper.Instance();
              return sm;
         }
     }
}
 //Mapper.Get()方法与Mapper.Instance()类似,该方法将调用默认的Sql.config文件建立SqlMapper
 //与使用DomSqlMapBuilder类的区别是,Mapper.Get(建立的SqlMapper每次都要先分析映射的XML文件,性能将大大的降低)不需要指定配置文件的名称,并且使用Mapper.Get()返回SqlMapper后如果映射的XML没有错误的话,会将该XML文件缓存到内存,下次调用的时候就不需要在检查XML文件,直到SqlMap.config被改变,这样将大大的提高了程序的性能,而使用DomSqlMapBuilder

//ItemList.cs 该文件定义了ItemList,该文件的属性和数据库中的字段相对应
namespace TouPiao.DataAccess
{
     using System;
    
     public class ItemList
     {
         Int32 _ID;
         String _ItemText;
         Int32 _pID;
         Int32 _tCount;
 
        
         public Int32 ID
         {
              get{return this._ID;}
              set{this._ID=value;}
         }
        
         public String ItemText
         {
              get{return this._ItemText;}
              set{this._ItemText=value;}
         }
        
         public Int32 pID
         {
              get{return this._pID;}
              set{this._pID=value;}
         }
        
         public Int32 tCount
         {
              get{return this._tCount;}
              set{this._tCount=value;}
         }
     }
}
 

 


 //这个类调用IBatis来存取数据
using
System;
using TouPiao.DataAccess;
using TouPiao;
using System.Collections;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
namespace TouPiao.Model
{
     ///<summary>
     ///投票类
     ///</summary>
     public class TouPiaoClass
     {
        
         SqlMapper sm=null;
         public TouPiaoClass()
         {
              sm=new GetSqlMapper().GetMapper();
         }       
         public IList GetItemsByID(int ID){
        
              return sm.QueryForList("GetItemsByID",ID);
         }
         ///<summary>
         ///增加一个新的选项
         ///</summary>
         ///<param name="pID">所属项目ID</param>
         ///<param name="ItemText">选项文本</param>
         public void AddNewItem(int pID,string ItemText)
         {
              ItemList il=new ItemList();
              il.pID=pID;
              il.ItemText=ItemText;
              sm.Insert("AddNewItem",il);
         }
         ///&lt

抱歉!评论已关闭.