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(',')); }