IBatis.Net學習筆記(四)–再談查詢 – JAVA編程語言程序開發技術文章

在上一篇文章中我提到瞭三種方式,都是各有利弊:

第一種方式當數據關聯很多的情況下,實體類會很復雜;

第二種方式比較靈活,但是不太符合OO的思想(不過,可以適當使用);

第三種方式最主要的問題就是性能不太理想,配置比較麻煩。

 

下面是第四種多表查詢的方式,相對第二種多瞭一點配置,但是其他方面都很好

(當然可能還有其他更好地解決方法,希望能多提寶貴意見-_-)

例子還是一樣:兩張表Account和Degree,使用Account_ID關聯,需要查出兩張表的所有紀錄

 

首先:修改實體類,增加以下屬性:

        private Degree _degree;

        public Degree Degree

        {

            get

            {

                return _degree;

            }

            set

            {

                _degree = value;

            }

        }

(和第三種方法一樣)

 

然後:修改配置文件,這也是最重要的地方(PS:IBatis.Net中的配置文件真的很強)

在resultMaps節加入:

    <resultMap id="com2result"  class="Account" >

      <result property="Id"           column="Account_ID"/>

      <result property="FirstName"    column="Account_FirstName"/>

      <result property="LastName"     column="Account_LastName"/>

      <result property="EmailAddress" column="Account_Email" nullValue="no_email@provided.com"/>

      <result property="Degree"  resultMapping="Account.Degree-result"/>

    </resultMap>

 

    <resultMap id="Degree-result"  class="Degree">

      <result property="Id"           column="Account_ID"/>

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

    </resultMap>

這裡最主要的就是使用瞭resultMapping屬性,resultMapping="Account.Degree-result",其中Account是當前配置文件的namespace:

<sqlMap namespace="Account"  ……

 

在statements節加入:

    <select id="GetCom2Tables"

     resultMap="com2result">

      select Accounts.*, Degree.*

      from Accounts,Degree

      where Accounts.Account_ID = Degree.Account_ID

    </select>

這樣就可以隨心所欲的寫自己需要的sql,性能也很好,不會出現第三種方法中的1+n條的查詢語句瞭。

 

 

 

作者 awp110

發佈留言