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">


<!--以上为固定格式,从这里开始以下是用户配置项    -->


     <properties resource="DataBase.config" /><!-- 指定一个属性源,相当与设置一些属性变量,该文件请查看下面   -->


     <settings>


<!-- 当该选项为true时,你在调用指定的映射时你总是必须给出完整的名称例如:queryForObject(“Namespace.statement.Id”);    -->

          <setting useStatementNamespaces="false"/>


<!-- 该选项指示是否使用缓存,默认为true -->

          <setting cacheModelsEnabled="true"/>


     </settings>

    

     <!--指定数据源

${datasource} ${database} ${userid} ${password} 为DataBase.config定义的值

-->

     <database>

               <provider name="sqlServer1.1"/>

          <dataSource name="mydb" connectionString="data source=${datasource};database=${database};user id=${userid};password=${password};min pool size=1; max pool size=50"/>

          </database>

<!--指定映射的文件的位置    -->

     <sqlMaps>

          <sqlMap resource="xml/ItemList.xml"/>

          <sqlMap resource="xml/XiangMuBiao.xml"/>

     </sqlMaps>

    

</sqlMapConfig>
 
 
说明:该文件为IBatis.net默认的配置文件,不能缺少,当然可以不必是Sql.config,但是如果改为其他的名字的话需要在前台代码中说明,请参考下面的内容

providers.config:该文件必须存在,并且不能改变它的文件名,该文件描述了如何连接数据库,无须配置

DataBase.config:自定义配置文件
 
<?xml version="1.0" encoding="utf-8" ?>

<settings>

    

     <!--  定义4个属性,在SqlMap.config中调用 -->

     <add key="userid" value="sa" />

     <add key="password" value="123456" />

     <add key="database" value="TouPiao" />

     <add key="datasource" value="(local)" />

</settings>

 
 
2、使用IBatis之映射XML文件

假设将数据库中名为ItemList的表映射到Asp.Net中的ItemList类,那么XML映射文件如下(映射文件的文件的说明请查看注释说明)
 
 
<?xml version="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:表示该类的完整的名称

      -->

          <typeAlias alias="ItemList" assembly="TouPiao.dll" type="TouPiao.DataAccess.ItemList" />

          <typeAlias alias="XiangMuBiao" assembly="TouPiao.dll" type="TouPiao.DataAccess.XiangMuBiao"/>

     </alias>

     <!--

          resultMaps:

               resultMaps用于返回值时进行ORM

         

          resultMap:

               其中每个resultMap对应一个ORM

               id:表示名称

               class:表示对应的类的别名根据<alias>标签中的定义

              

          result:

               property表示类中的属性

               column表示数据库中对应的字段

         

     -->

     <resultMaps>

          <resultMap id="ItemResult" class="ItemList">

               <result property="ID" column="ID"/>

               <result property="ItemText" column="ItemText" nullValue="没有选项"/>

               <result property="pID" column="pID"/>

               <result property="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>

          <parameterMap id="AddNewItemParam"><!--AddNewItem的参数列表-->

               <parameter property="ItemText"/>

               <patameter property="pID"/>

          </parameterMap>

          <!--DelItem参数列表 -->

          <parameterMap id="DelItemMap">

               <parameter property="value"/>

          </parameterMap>

         

          <parameterMap id="UpdateItemMap">

               <parameter property="ID" column="ID"/>

               <parameter property="ItemText" column="ItemText"/>

               <parameter property="tCount" column="tCount"/>

          </parameterMap>

         

          <parameterMap id="AddItemCountMap">

               <parameter property="value"/>

          </parameterMap>

         

          <patameterMap id="AddNewXiangMuMap">

               <parameter property="Title"/>

               <patameter property="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对象作为参数传进来

           -->

          <select id="GetItemsByID"  resultMap="ItemResult">

               select * from ItemList where pID=#ID#

          </select>

          <select id="GetItemsByIDAndDate"  resultMap="ItemResult">

               select * from ItemList where pID=#ID# and isvis=#ISVIS#

          </select>

         

          <!--调用一个存储过程,增加一个选项 存储过程必须指定 parameterMap,如果有返回值的话必须指定 resultMap-->

          <procedure id="AddNewItem" parameterMap="AddNewItemParam">

               AddNewItem

          </procedure>

         

          <!--调用一个存储过程,删除一个选项 -->

          <procedure id="DelItem" parameterMap="DelItemMap">

               DelItem

          </procedure>

          <!--调用一个存储过程,更新一个选项 -->

          <procedure id="UpdateItem" parameterMap="UpdateItemMap">

               UpdateItem

          </procedure>

          <!--调用一个存储过程,更新一个选项的值 -->

          <procedure id="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()不需要指定配置文件的名称,并且使用Mapper.Get()返回SqlMapper后如果映射的XML没有错误的话,会将该XML文件缓存到内存,下次调用的时候就不需要在检查XML文件,直到SqlMap.config被改变,这样将大大的提高了程序的性能,而使用DomSqlMapBuilder建立的SqlMapper每次都要先分析映射的XML文件,性能将大大的降低
 
 
 
//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(','));

         }
 
 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/howfar2006/archive/2006/06/29/850249.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值