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

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

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

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

 PS:

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

posted @ 2009-02-12 16:44 Roc_Lee 阅读(458) 评论(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 阅读(979) 评论(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 阅读(684) 评论(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 阅读(276) 评论(0) 编辑