from:http://blog.csdn.net/liangCK/archive/2008/11/13/3292540.aspx

自己又对这个有了深的了解,分享下

Code
posted @ 2009-02-17 13:49 Roc_Lee 阅读(191) 评论(0) 编辑

经过使用IBatisNet,个人感觉作为ORM来mapping的话,是非常不错的。

但如果进行动态sql操作的话,就相当麻烦了,不如采用存储过程,在存储过程中操作即可。

在xml中配置简单的增,删,改,查功能,如一句sql就可以解决的问题再在xml中配置能让使用更加方便,快捷。

这个系列结束了,如有什么问题,共同探讨下。

 PS:

最近遇到一个问题,如果所有xml中的id重合的话不行,注意这个问题。起名字的话加个V1啥的。

posted @ 2009-02-12 16:44 Roc_Lee 阅读(421) 评论(5) 编辑
 

动态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>

基本操作讲解完毕,相信简单的应用已经够大家使用了。如有深入的了解再继续探讨

posted @ 2009-02-12 14:36 Roc_Lee 阅读(925) 评论(1) 编辑
 

先写个简单的存储过程

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>

posted @ 2009-02-12 13:42 Roc_Lee 阅读(591) 评论(3) 编辑

 

 把表结构填上,避免理解困难

 

 

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”的执行.

      } 

 }  

posted @ 2009-02-12 10:25 Roc_Lee 阅读(248) 评论(0) 编辑
 

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">                      参数集合,如为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的属性CardNo

Name =#Name#                          #Name#对应Member的属性Name

where    UserID =#UserID#                      #UserID#对应 Member的属性UserID

    </update>

      

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

              delete 

              from Member

              where UserID = #value#

         </delete>

     </statements>     

</sqlMap>

明天将Member类以及相关方法以及数据库复合查询放出

posted @ 2009-02-11 17:59 Roc_Lee 阅读(342) 评论(1) 编辑

最近有个项目使用了IBatisNet,稍微细致的研究了一下,也落俗套的写了一些教程,希望促进共同交流

1。先交代一下何为IBatisNet

IBatisNet是一个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>

2providers.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"               //默认数据库设置为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

posted @ 2009-02-11 17:44 Roc_Lee 阅读(474) 评论(1) 编辑