IBatisNet的相关使用方法 - 入门

来源:互联网 发布:数据预测模型算法 编辑:程序博客网 时间:2024/05/16 06:51

IBatisNet的相关使用方法

1.     IBatisNet简介

IBatisNet是一个ORM(Object Relational Mapping,对象关系映射)框架,着重于ORM中的M(Mapping),通过使用XML文档在sql语句和实体对象之间建立映射。

常用的图解:

图

2.     IBatisNet配置文件详解

SqlMap.configMap配置文件

<?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;ConnectionReset=FALSE;Min Pool Size=1;Max Pool Size=100"/>

                                                   数据库链接

     </database>

     <sqlMaps>

<sqlMap resource="maps/Member.xml"/>      Map文件加载的路径,如果要加载多个,按此格式写下去

     </sqlMaps>

</sqlMapConfig>

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

 

3.      相关Map文件配置

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等语句返回的map

class="Member">             对应alias中映射的类名

              <result property="Name"              对应alias中映射的类的属性

column="Name"          />   对应返回结果中的列表对应到类的属性

              <result property="CardNO"           

column="CardNO"        />   为了解释采用这种格式,见谅

         </resultMap> 

     </resultMaps>

     <statements>

     <select id="SelectMember"                     方法id,在程序中被调用

resultMap="MemberMap"                 对应resultMap中相应的id

parameterClass="int">                参数集合,如为intstring等单值,则语句中

                                     参数位置使用#value#        

SELECT CardNo,Name FROM Member WhereUserID = #value#

     </select>

     <update id="SaveMember"

parameterClass="Member"              参数集合Member,对应相应操作的类

resultClass="int">

         UPDATE   Memberset

CardNo = #CardNo#,               Member的属性CardNo

Name =#Name#                     Member的属性Name

where    UserID=#UserID#                 Member的属性UserID

</update>

<delete id="DeleteMember" parameterClass="int">

              delete 

              from Member

              where UserID = #value#

     </delete>

</statements>     

</sqlMap>

<insert><delete><update><select>四个节点分别代表对数据库进行的4个操作

 

4.     相关类以及Member

Create table Member

(   User_ID int identity(1,1), --自增

    CardNo nvarchar(50) not null,

    [Name] nvarchar(50) not null)

 

 

namespace ETest.test {

    [Serializable]

    publicclass Member{                          Member类。包括属性存取

         private int_user_ID;

        private string_name;

         private string_cardNO;

        public stringCardNO

{

              get { return_cardNO; }

              set { _cardNO = value; }

        }

public stringName

{

              get { return_name; }

              set { _UserName = value; }

       

 

        public intUser_ID

{

              get { return_user_ID; }

              set { _user_ID = value; }

        }

    }

public class MemberLogic                       相关逻辑类,包含所有逻辑

{

        privateSqlMapper mapper = null;

        publicMemberLogic () {                构造函数

            DomSqlMapBuilderbuilder = new DomSqlMapBuilder();

            mapper =builder.Configure();      mapping

     }     

public MemberSelect(int User_ID)

     {

          return(Member)mapper.QueryForObject("SelectMember", User_ID);

         map的自有方法,返还Member.xmlid为“SelectMember”的执行结果,返还结果为对象

     }

     publicvoid Update(Membermember)

     {

           mapper.Update("SaveMember", member);

           map的自有方法,直接对应Member.xmlid为“SaveMember”的执行.

      }

public void Delete(int User_ID)

     {

           mapper.Update("DeleteMember ", member);

           map的自有方法,直接对应Member.xmlid为“DeleteMember”的执行.

      } 

  }  

下面简单说一下mapper的几个常用方法:

QueryForObject用于返回单个实体类,

QueryForList返回实现IList接口的ArrayList,

QueryForDictionary用于返回实现IDictionaryHashtable

 

5.      存储过程的使用

先写个简单的存储过程

create  proc InsertMember

(

    @UserID int,

    @Cardno nvarchar(50),

    @Name nvarchar(10)

)

 

as

begin

    insert memeber select @Cardno,@Name

    select @UserID=@@identity

end

 

以下文件配置在Member.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>

 

6.     动态SQL

动态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">                   ,也可以为属性名来比较

相关sql ,就是动态sql要添加的条件,比如:

Name =#value#

</关键字>

</dynamic>

 

 

原创粉丝点击