IBatisNet使用方法
1。先交代一下何为IBatisNetIBatisNet是一个ORM(Object Relational Mapping,对象关系映射)框架,着重于ORM中的M(Mapping),通过使用XML文档在sql语句和实体对象之间建立映射。是IBatis的.NET版本 2 。IBatisNet配置文件详解  SqlMap.config Map配置文件<?xml version="1.0" encoding="utf-8"?> <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <settings>         <setting useStatementNamespaces="false"/>  是否使用sqlMap节点中的namespace         <setting cacheModelsEnabled="true"/>       是否启用缓存机制         <setting validateSqlMap="false"/>          是否需要使用SqlMapConfig.xsd schema验证隐射     </settings>     <database>         <provider name="sqlServer1.1"/>            provider获取providers.config中对应的属性         <dataSource name="ConnectString" connectionString="server=.;database=Test;user id=sa;password=sa;Connection Reset=FALSE;Min Pool Size=1;Max Pool Size=100"/>                                                    数据库链接     </database>     <sqlMaps><sqlMap resource="maps/Member.xml"/>       Map文件加载的路径,如果要加载多个,按此格式写下去     </sqlMaps></sqlMapConfig>2.providers.config 数据库链接配置文件
<?xml version="1.0" encoding="utf-8"?> <providers xmlns="http://ibatis.apache.org/providers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">      <clear/>     <provider         name="sqlServer1.0"         enabled="false"         assemblyName="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"         connectionClass="System.Data.SqlClient.SqlConnection"          commandClass="System.Data.SqlClient.SqlCommand"         parameterClass="System.Data.SqlClient.SqlParameter"         parameterDbTypeClass="System.Data.SqlDbType"         parameterDbTypeProperty="SqlDbType"         dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"         commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"         usePositionalParameters = "false"         useParameterPrefixInSql = "true"         useParameterPrefixInParameter = "true"             parameterPrefix="@"         />        <provider         name="sqlServer1.1"         enabled="true"         assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"         connectionClass="System.Data.SqlClient.SqlConnection"         commandClass="System.Data.SqlClient.SqlCommand"         parameterClass="System.Data.SqlClient.SqlParameter"         parameterDbTypeClass="System.Data.SqlDbType"         parameterDbTypeProperty="SqlDbType"         dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"         commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"             usePositionalParameters = "false"             useParameterPrefixInSql = "true"         useParameterPrefixInParameter = "true"                           parameterPrefix="@"     />   <providers>
可以获取官方文件,获得相应数据库的provider

解决方案 »

  1.   

    与数据库的简单交互
    Member.xml
    <?xml version="1.0" encoding="utf-8" ?><sqlMap namespace="MemberInfo" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">namespace就是useStatementNamespaces对应的namespace     <alias>         <typeAlias    alias="Member"                   此map映射的类名 assembly="ETest.dll"             引用的程序集type="ETest.test.Member"         对应项目中的累 />         </alias>     <resultMaps>                                        返回的所有结果类         <resultMap                                      返回的一个结果类id="MemberMap"                    id,对应下面select等语句返回的mapclass="Member">                   对应alias中映射的类名              <result property="Name"                    对应alias中映射的类的属性column="Name"          />         对应返回结果中的列表对应到类的属性              <result property="CardNO"            column="CardNO"        />         为了解释采用这种格式,见谅         </resultMap>      </resultMaps>     <statements>     <select id="SelectMember"                           方法id,在程序中被调用resultMap="MemberMap"                      对应resultMap中相应的idparameterClass="int">                      参数集合,如为int,string等单值,则语句中                                           参数位置使用#value#         SELECT CardNo,Name FROM Member Where UserID = #value#     </select>     <update id="SaveMember" parameterClass="Member"                    参数集合Member,对应相应操作的类 resultClass="int">         UPDATE  Member set CardNo = #CardNo#,                    #CardNo#对应 Member的属性CardNoName =#Name#                          #Name#对应Member的属性Namewhere    UserID =#UserID#                      #UserID#对应 Member的属性UserID    </update>            <delete id="DeleteMember" parameterClass="int">              delete               from Member               where UserID = #value#          </delete>     </statements>     </sqlMap>
      

  2.   

    把表结构填上,避免理解困难  Create table Member(   User_ID int identity(1,1), --自增    CardNo nvarchar(50) not null,    [Name] nvarchar(50) not null)  相关类
    namespace ETest.test {    [Serializable]    public class Member {                          Member类,包括属性存取        private int _user_ID;        private string _name;        private string _cardNO;        public string CardNO {             get { return _cardNO; }             set { _cardNO = value; }}public string Name {             get { return _name; }             set { _UserName = value; }}         public int User_ID {             get { return _user_ID; }             set { _user_ID = value; }}    }public class MemberLogic                       相关逻辑类,包含所有逻辑{   private SqlMapper mapper = null;        public MemberLogic () {                     构造函数            DomSqlMapBuilder builder = new DomSqlMapBuilder();            mapper = builder.Configure();           mapping     }      public Member Select(int User_ID)      {          return (Member)mapper.QueryForObject("SelectMember", User_ID);         map的自有方法,返还Member.xml中id为“SelectMember”的执行结果,返还结果为对象     }     public void Update(Member member)     {           mapper.Update("SaveMember", member);          map的自有方法,直接对应 Member.xml中id为“SaveMember”的执行.      } public void Delete(int User_ID)     {           mapper.Update("DeleteMember ", member);          map的自有方法,直接对应 Member.xml中id为“DeleteMember”的执行.      }  }   
      

  3.   

    没有编辑好,以后注意。呵呵
    这个是如何操作存储过程
    先写个简单的存储过程
    create proc InsertMember(    @UserID int,    @Cardno nvarchar(50),    @Name nvarchar(10)) asbegin    insert memeber select @Cardno,@Name    select @UserID=@@identityend 以下文件配置在Member.xml中进行操作存储过程
    [code=XML]<procedure    id="InsertMember"                          存储过程名称                parameterMap="Member_Par"                  对应的parameterMap,接来下马上登场                resultClass="int">                         返回值,同正常返回值              InsertMember</procedure>在procedure 中必须设置parameterMap属性,即使存储不带任何参数也需要设置一下。对应的parameterMap:<parameterMaps>        <parameterMap      id=" Member_Par"            对应 procedure中的parameterMap                           class="Member">             对应的类Member             <parameter    property="CardNo"           对应类中属性                               column="CardNo"             对应参数的属性                                dbType="NVARCHAR"           数据库字段类型                                    type="string"               自动类型                               direction="INPUT" />        参数类型                                  <parameter     property="Name"             对应类中属性                               column="Name"               对应参数的属性                                dbType="NVARCHAR"           数据库字段类型                                    type="string"               自动类型                               direction="INPUT" />        参数类型               <parameter     property="User_ID"          对应类中属性                               column="User_ID"            对应参数的属性                                dbType="INT"                数据库字段类型                                    type="int"                  自动类型                               direction="INPUTOUTPUT" />  返回值参数               </parameterMap> </parameterMaps>
      

  4.   

    动态sql可以解决相关的多表链接查询以及模糊查询的问题    <select id="SelectEemployee" parameterClass="string" resultMap = "MemberMap">         select CardNo,Name from Member         <dynamic prepend="WHERE">                <isParameterPresent>                    User_ID = #value#                </isParameterPresent>         </dynamic></select>
    动态sql写法
    <dynamic prepend ="WHERE">           表示动态sql开始,如果关联表 prepend ="AND",可以为""    <关键字          <!—关键字可以为以下                 相关含义         <isEqual>                                                     参数等于值                 <isNotEqual>                                           参数不等于值                 <isGreaterThan>                                        参数大于值                 <isGreaterEqual>                                       参数大于等于值                 <isLessEqual>                                          参数小于等于值                 <isPropertyAvailable>                                  参数被使用                 <isNotPropertyAvailable>                               参数没有使用                 <isNull>                                               参数 is null               <isNotNull>                                            参数 is not null               <isEmpty>                                              参数为空                 <isNotEmpty>                                           参数不为空                 <isParameterPresent>                                   参数类不为NULL               <isNotParameterPresent>                                参数类为NULL               -- >               prepend="AND"                        连接关键字                 property="UserID"                    参数                 compareValue="20">                   值,也可以为属性名来比较
                     1.相关sql ,就是动态sql要添加的条件,比如:
                     Name =#value#                    2.重复元素,这个属性适合一个集合,比如SQL中的in 后的集合等                     <iterate prepend="AND"               连接关键字                               property="NameList"         参数                               open="("                    open后的串为开始括号作用“(”                               close=")"                   close后的串为结束括号作用“)”                               conjunction="OR">           连接方式 AND 或OR,每个元素之间的符号                             Name=#NameList[]#                   </iterate>    --以上相当与SQL    And Name = (/open   #NameList[0] or/conjunction #NameList[1] or ….)/close    </关键字> </dynamic> 
      

  5.   

    经过使用IBatisNet,个人感觉作为ORM来mapping的话,是非常不错的。但如果进行动态sql操作的话,就相当麻烦了,不如采用存储过程,在存储过程中操作即可。在xml中配置简单的增,删,改,查功能,如一句sql就可以解决的问题再在xml中配置能让使用更加方便,快捷。