您的位置:首页 > 数据库

IBatis详细使用例子

2007-01-22 19:41 330 查看
IBatis详细使用例子

 1、认识配置文件
SqlMap.config:

[align=left]<?xmlversion="1.0"encoding="utf-8"?>[/align]
[align=left]<sqlMapConfigxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"[/align]
[align=left]     xsi:noNamespaceSchemaLocation="SqlMapConfig.xsd">[/align]
[align=left]<!--以上为固定格式,从这里开始以下是用户配置项    -->[/align]
[align=left][/align]
[align=left]     <propertiesresource="DataBase.config"/><!-- 指定一个属性源,相当与设置一些属性变量,该文件请查看下面   -->[/align]
[align=left][/align]
[align=left]     <settings>[/align]
[align=left]<!-- 当该选项为true时,你在调用指定的映射时你总是必须给出完整的名称例如:queryForObject(“Namespace.statement.Id”);    -->[/align]
[align=left]          <settinguseStatementNamespaces="false"/>[/align]
[align=left]<!-- 该选项指示是否使用缓存,默认为true -->[/align]
[align=left]          <settingcacheModelsEnabled="true"/>[/align]
[align=left]     </settings>[/align]
[align=left]     [/align]
[align=left]     <!--指定数据源[/align]
[align=left]${datasource} ${database} ${userid} ${password} 为DataBase.config定义的值[/align]
[align=left]-->[/align]
[align=left]     <database>[/align]
[align=left]               <providername="sqlServer1.1"/>[/align]
[align=left]          <dataSourcename="mydb"connectionString="data source=${datasource};database=${database};user id=${userid};password=${password};min pool size=1; max pool size=50"/>[/align]
[align=left]          </database>[/align]
[align=left] [/align]
[align=left]<!--指定映射的文件的位置    -->[/align]
[align=left]     <sqlMaps>[/align]
[align=left]          <sqlMapresource="xml/ItemList.xml"/>[/align]
          <sqlMapresource="xml/XiangMuBiao.xml"/>
[align=left]     </sqlMaps>[/align]
[align=left]     [/align]
</sqlMapConfig>
 
说明:该文件为IBatis.net默认的配置文件,不能缺少,当然可以不必是Sql.config,但是如果改为其他的名字的话需要在前台代码中说明,请参考下面的内容
providers.config:该文件必须存在,并且不能改变它的文件名,该文件描述了如何连接数据库,无须配置
DataBase.config:自定义配置文件
[align=left]<?xmlversion="1.0"encoding="utf-8"?>[/align]
[align=left]<settings>[/align]
[align=left]     [/align]
[align=left]     <!--  定义4个属性,在SqlMap.config中调用 -->[/align]
[align=left]     <addkey="userid"value="sa"/>[/align]
[align=left]     <addkey="password"value="123456"/>[/align]
[align=left]     <addkey="database"value="TouPiao"/>[/align]
[align=left]     <addkey="datasource"value="(local)"/>[/align]
</settings>
 
2、使用IBatis之映射XML文件
假设将数据库中名为ItemList的表映射到Asp.Net中的ItemList类,那么XML映射文件如下(映射文件的文件的说明请查看注释说明)
[align=left]<?xmlversion="1.0"encoding="utf-8"?>[/align]

[align=left]<sqlMapnamespace="ItemList"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"[/align]
[align=left]     xsi:noNamespaceSchemaLocation="SqlMap.xsd">[/align]
[align=left]     <alias><!-- alias:取别名[/align]
[align=left]                    assembly:表示类所在的文件[/align]
[align=left]                    type:表示该类的完整的名称[/align]
[align=left]      -->[/align]
[align=left]          <typeAliasalias="ItemList"assembly="TouPiao.dll"type="TouPiao.DataAccess.ItemList"/>[/align]
[align=left]          <typeAliasalias="XiangMuBiao"assembly="TouPiao.dll"type="TouPiao.DataAccess.XiangMuBiao"/>[/align]
[align=left]     </alias>[/align]
[align=left]     <!--[/align]
[align=left]          resultMaps:[/align]
[align=left]               resultMaps用于返回值时进行ORM[/align]
[align=left]          [/align]
[align=left]          resultMap:[/align]
[align=left]               其中每个resultMap对应一个ORM[/align]
[align=left]               id:表示名称[/align]
[align=left]               class:表示对应的类的别名根据<alias>标签中的定义[/align]
[align=left]               [/align]
[align=left]          result:[/align]
[align=left]               property表示类中的属性[/align]
[align=left]               column表示数据库中对应的字段[/align]
[align=left]          [/align]
[align=left]     -->[/align]
[align=left]     <resultMaps>[/align]
[align=left]          <resultMapid="ItemResult"class="ItemList">[/align]
[align=left]               <resultproperty="ID"column="ID"/>[/align]
[align=left]               <resultproperty="ItemText"column="ItemText"nullValue="没有选项"/>[/align]
[align=left]               <resultproperty="pID"column="pID"/>[/align]
[align=left]               <resultproperty="tCount"column="tCount"nullValue="-1"/>[/align]
[align=left]          </resultMap>[/align]
[align=left]     </resultMaps>[/align]
[align=left]     [/align]
[align=left]     <!--[/align]
[align=left]          parameterMap:[/align]
[align=left]               id:表示名称,不能少[/align]
[align=left]               其他的参数可以不写,例如 class[/align]
[align=left]          parameter:[/align]
[align=left]               property:表示类中的属性,不能少,并且应用在存储过程中的时候,必须按照参数的位置[/align]
[align=left]               其他参数可以省略:[/align]
[align=left]               column:数据库中的字段[/align]
[align=left]               direction:参数的传递方式 Input|Output|InputOutput[/align]
[align=left]               dbType:数据库中的字段的类型[/align]
[align=left]               type:类的属性的类型,可能要写成CLR形式,例如int类型应该写成System.Int32[/align]
[align=left]               nullValue:空值转换,将空值转换成指定的值,以便防止某些类型不支持NULL的类型出错,例如int double等,注意:[/align]
[align=left]                              1.只能转换成与property类型相一致的值[/align]
[align=left]                              2.空不代表"",而是NULL[/align]
[align=left]                              3.当该属性的类型匹配一个代替空值的值的时候(例如:-9999),更新字段的时候,空值将代替这个值被写入数据库,即nullValue指定的值不被写入数据库[/align]
[align=left]               size:数据库中字段的大小,设置字段中的数据的最大值[/align]
[align=left]               precision:数据库中字段的精度,设置当该字段映射到类的对应的属性时的精度[/align]
[align=left]               [/align]
[align=left]     -->[/align]
[align=left]     <parameterMaps>[/align]
[align=left]          <parameterMapid="AddNewItemParam"><!--AddNewItem的参数列表-->[/align]
[align=left]               <parameterproperty="ItemText"/>[/align]
[align=left]               <patameterproperty="pID"/>[/align]
[align=left]          </parameterMap>[/align]
[align=left]          <!--DelItem参数列表 -->[/align]
[align=left]          <parameterMapid="DelItemMap">[/align]
[align=left]               <parameterproperty="value"/>[/align]
[align=left]          </parameterMap>[/align]
[align=left]          [/align]
[align=left]          <parameterMapid="UpdateItemMap">[/align]
[align=left]               <parameterproperty="ID"column="ID"/>[/align]
[align=left]               <parameterproperty="ItemText"column="ItemText"/>[/align]
[align=left]               <parameterproperty="tCount"column="tCount"/>[/align]
[align=left]          </parameterMap>[/align]
[align=left]          [/align]
[align=left]          <parameterMapid="AddItemCountMap">[/align]
[align=left]               <parameterproperty="value"/>[/align]
[align=left]          </parameterMap>[/align]
[align=left]          [/align]
[align=left]          <patameterMapid="AddNewXiangMuMap">[/align]
[align=left]               <parameterproperty="Title"/>[/align]
[align=left]               <patameterproperty="IsMul"/>[/align]
[align=left]          </patameterMap>[/align]
[align=left]     </parameterMaps>[/align]
[align=left]     [/align]
[align=left]     <!--[/align]
[align=left]          statements:语句的集合[/align]
[align=left]               <statement>标签可以替代<select>,<procedure> ,<delete>,<update>,<insert>,并且可以通过SqlMapper的delete update insert方法以及所有关于查询的方法执行[/align]
[align=left]               <select>:可以通过SqlMapper的所有关于查询的方法执行[/align]
[align=left]               <delete> <insert> <update>:可以通过SqlMapper的 delete update insert方法执行[/align]
[align=left]               [/align]
[align=left]          <delete> <insert> <update> <statement> <select> <procedure>:[/align]
[align=left]               id:该语句的标识[/align]
[align=left]               resultMap:只有<select> <statement>才有,用于将结果映射到相应的字段,该属性不能少[/align]
[align=left]               parameterMap:用于<procedure>的时候不能缺少,并且对应的parameterMap的<parameter>的property的顺序必须和存储过程的参数的顺序一致[/align]
[align=left]               parameterClass:可以省略,将使用调用时传进来的类型进行调用[/align]
[align=left]                                   注意:[/align]
[align=left]                                        <select id="GetItemsByID"  resultMap="ItemResult">[/align]
[align=left]                                             select * from ItemList where pID=#ID#[/align]
[align=left]                                        </select>[/align]
[align=left]                                        当调用时使用[/align]
[align=left]                                        [/align]
[align=left]                                        sqlMapper.QueryForList("GetItemByID",1)   //这时候#ID#的直就是1[/align]
[align=left]                                        [/align]
[align=left]                                        sqlMapper.QueryForList("GetItemByUD",ItemClass) //假设ItemClass包含一个ID字段,和name字段,那么这时候#ID#的值就是ItemClass.ID的值[/align]
[align=left]                                        [/align]
[align=left]     -->[/align]
[align=left]     <statements>[/align]
[align=left]          <!-- 使用Sql语句,通过项目ID获得该项目的所有选项[/align]
[align=left]          注意:[/align]
[align=left]               该标签没有指定parameterMap或者parameterClass,将根据前台调用时指定的对象作为参数,如果前台传进来的是一个原始对象例如:int string 等那么#ID#就是[/align]
[align=left]          该参数的值[/align]
[align=left]               如果传进来的是一个类的对象,假设该类包含两个属性(name,ID)[/align]
[align=left]          那么#ID#就代表该对象的ID属性,由于name属性没有被用到,因此被忽略[/align]
[align=left]               如果需要传进两个参数(不是某个对象的属性),那么必须将包含这两个键值的Hashtable对象作为参数传进来[/align]
[align=left]           -->[/align]
[align=left]          <selectid="GetItemsByID"  resultMap="ItemResult">[/align]
[align=left]               select * from ItemList where pID=#ID#[/align]
[align=left]          </select>[/align]
[align=left]          <selectid="GetItemsByIDAndDate"  resultMap="ItemResult">[/align]
[align=left]               select * from ItemList where pID=#ID# and isvis=#ISVIS#[/align]
[align=left]          </select>[/align]
[align=left]          [/align]
[align=left]          <!--调用一个存储过程,增加一个选项 存储过程必须指定 parameterMap,如果有返回值的话必须指定 resultMap-->[/align]
[align=left]          <procedureid="AddNewItem"parameterMap="AddNewItemParam">[/align]
[align=left]               AddNewItem[/align]
[align=left]          </procedure>[/align]
[align=left]          [/align]
[align=left]          <!--调用一个存储过程,删除一个选项 -->[/align]
[align=left]          <procedureid="DelItem"parameterMap="DelItemMap">[/align]
[align=left]               DelItem[/align]
[align=left]          </procedure>[/align]
[align=left]          <!--调用一个存储过程,更新一个选项 -->[/align]
[align=left]          <procedureid="UpdateItem"parameterMap="UpdateItemMap">[/align]
[align=left]               UpdateItem[/align]
[align=left]          </procedure>[/align]
[align=left]          <!--调用一个存储过程,更新一个选项的值 -->[/align]
[align=left]          <procedureid="AddItemCount"parameterMap="AddItemCountMap">[/align]
[align=left]               AddItemCount[/align]
[align=left]          </procedure>[/align]
[align=left]     </statements>[/align]
[align=left]</sqlMap>[/align]
3、开始使用IBatis.net
[align=left]//GetSqlMapper.cs[/align]
[align=left]using System;[/align]
[align=left]using IBatisNet.DataMapper;[/align]
[align=left]using IBatisNet.DataMapper.Configuration;[/align]
[align=left]namespace TouPiao.DataAccess[/align]
[align=left]{[/align]
[align=left]     ///<summary>[/align]
[align=left]     /// 该类返回一个SqlMapper一个SqlMapper对应一个SqlMap.config配置文件[/align]
[align=left]     ///</summary>[/align]
[align=left]     public class GetSqlMapper[/align]
[align=left]     {[/align]
[align=left]         public SqlMapper GetMapper()[/align]
[align=left]         {[/align]
[align=left]              DomSqlMapBuilder d=new DomSqlMapBuilder();//初始化一个DomSqlMapBuilder[/align]
[align=left]              SqlMapper sm=d.Configure("SqlMap.config");//调用Configure方法并指定配置文件的名称,返回一个SqlMapper[/align]
[align=left]              //SqlMapper sm=Mapper.Get();       
             // SqlMapper sm=Mapper.Instance();[/align]
[align=left]              return sm;[/align]
[align=left]         }[/align]
[align=left]     }[/align]
[align=left]}[/align]
 //Mapper.Get()方法与Mapper.Instance()类似,该方法将调用默认的Sql.config文件建立SqlMapper
 //与使用DomSqlMapBuilder类的区别是,Mapper.Get(建立的SqlMapper每次都要先分析映射的XML文件,性能将大大的降低)不需要指定配置文件的名称,并且使用Mapper.Get()返回SqlMapper后如果映射的XML没有错误的话,会将该XML文件缓存到内存,下次调用的时候就不需要在检查XML文件,直到SqlMap.config被改变,这样将大大的提高了程序的性能,而使用DomSqlMapBuilder
[align=left]//ItemList.cs 该文件定义了ItemList,该文件的属性和数据库中的字段相对应[/align]
[align=left]namespace TouPiao.DataAccess[/align]
[align=left]{[/align]
[align=left]     using System;[/align]
[align=left]     [/align]
[align=left]     public class ItemList[/align]
[align=left]     {[/align]
[align=left]         Int32 _ID;[/align]
[align=left]         String _ItemText;[/align]
[align=left]         Int32 _pID;[/align]
[align=left]         Int32 _tCount;[/align]
[align=left] [/align]
[align=left]         [/align]
[align=left]         public Int32 ID[/align]
[align=left]         {[/align]
[align=left]              get{return this._ID;}[/align]
[align=left]              set{this._ID=value;}[/align]
[align=left]         }[/align]
[align=left]         [/align]
[align=left]         public String ItemText[/align]
[align=left]         {[/align]
[align=left]              get{return this._ItemText;}[/align]
[align=left]              set{this._ItemText=value;}[/align]
[align=left]         }[/align]
[align=left]         [/align]
[align=left]         public Int32 pID[/align]
[align=left]         {[/align]
[align=left]              get{return this._pID;}[/align]
[align=left]              set{this._pID=value;}[/align]
[align=left]         }[/align]
[align=left]         [/align]
[align=left]         public Int32 tCount[/align]
[align=left]         {[/align]
[align=left]              get{return this._tCount;}[/align]
[align=left]              set{this._tCount=value;}[/align]
[align=left]         }[/align]
[align=left]     }[/align]
[align=left]}[/align]
 
 
[align=left] //这个类调用IBatis来存取数据
using System;[/align]
[align=left]using TouPiao.DataAccess;[/align]
[align=left]using TouPiao;[/align]
[align=left]using System.Collections;[/align]
[align=left]using IBatisNet.DataMapper;[/align]
[align=left]using IBatisNet.DataMapper.Configuration;[/align]
[align=left]namespace TouPiao.Model[/align]
[align=left]{[/align]
[align=left]     ///<summary>[/align]
[align=left]     ///投票类[/align]
[align=left]     ///</summary>[/align]
[align=left]     public class TouPiaoClass[/align]
[align=left]     {[/align]
[align=left]         [/align]
[align=left]         SqlMapper sm=null;[/align]
[align=left]         public TouPiaoClass()[/align]
[align=left]         {[/align]
[align=left]              sm=new GetSqlMapper().GetMapper();[/align]
[align=left]         }        [/align]
[align=left]         public IList GetItemsByID(int ID){[/align]
[align=left]         [/align]
[align=left]              return sm.QueryForList("GetItemsByID",ID);[/align]
[align=left]         }[/align]
[align=left]         ///<summary>[/align]
[align=left]         ///增加一个新的选项[/align]
[align=left]         ///</summary>[/align]
[align=left]         ///<param name="pID">所属项目ID</param>[/align]
[align=left]         ///<param name="ItemText">选项文本</param>[/align]
[align=left]         public void AddNewItem(int pID,string ItemText)[/align]
[align=left]         {[/align]
[align=left]              ItemList il=new ItemList();[/align]
[align=left]              il.pID=pID;[/align]
[align=left]              il.ItemText=ItemText;[/align]
[align=left]              sm.Insert("AddNewItem",il);[/align]
[align=left]         }[/align]
[align=left]         ///<summary>[/align]
[align=left]         ///删除一个选项[/align]
[align=left]         ///</summary>[/align]
[align=left]         ///<param name="ID">选项ID</param>[/align]
[align=left]         public void DelItem(int ID){[/align]
[align=left]              sm.Delete("DelItem",ID);[/align]
[align=left]         }[/align]
[align=left]         ///<summary>[/align]
[align=left]         ///更新一个选项[/align]
[align=left]         ///</summary>[/align]
[align=left]         ///<param name="ID">选项ID</param>[/align]
[align=left]         ///<param name="ItemText">选项文本</param>[/align]
[align=left]         ///<param name="tCount">选项计数</param>[/align]
[align=left]         public void UpdateItem(int ID,string ItemText,int tCount){[/align]
[align=left]              ItemList il=new ItemList();[/align]
[align=left]              il.ID=ID;[/align]
[align=left]              il.ItemText=ItemText; [/align]
[align=left]              il.tCount=tCount;[/align]
[align=left]              sm.Update("UpdateItem",il);[/align]
[align=left]         }[/align]
[align=left]         ///<summary>[/align]
[align=left]         ///将指定的选项的计数加1[/align]
[align=left]         ///</summary>[/align]
[align=left]         ///<param name="al">选中的选项列表</param>[/align]
[align=left]         public void AddItemCount(string al){[/align]
[align=left]              sm.Update("AddItemCount",al.Trim(','));[/align]
         }
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息