IBatis详细使用例子

    技术2022-05-11  119

    IBatis详细使用例子

     1、认识配置文件

    SqlMap.config:

    <? xml version ="1.0" encoding ="utf-8"?> < sqlMapConfig xmlns : 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:自定义配置文件 <? xml version ="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"?> < sqlMap namespace ="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);          }          ///<summary>          /// 删除一个选项          ///</summary>          ///<param name="ID"> 选项ID </param>          public void DelItem(int ID){               sm.Delete("DelItem",ID);          }          ///<summary>          /// 更新一个选项          ///</summary>          ///<param name="ID"> 选项ID </param>          ///<param name="ItemText"> 选项文本 </param>          ///<param name="tCount"> 选项计数 </param>          public void UpdateItem(int ID,string ItemText,int tCount){               ItemList il=new ItemList();               il.ID=ID;               il.ItemText=ItemText;               il.tCount=tCount;               sm.Update("UpdateItem",il);          }          ///<summary>          /// 将指定的选项的计数加1          ///</summary>          ///<param name="al"> 选中的选项列表 </param>          public void AddItemCount(string al){               sm.Update("AddItemCount",al.Trim(','));          }  


    最新回复(0)