<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    閑人野居
    好好學(xué)習(xí),天天向上
    posts - 57,  comments - 137,  trackbacks - 0
    ??? hibernate 的強(qiáng)大在于完全的對象化,對于對象之間的關(guān)系解決的比較好,如1對1,1對多,多對1,以及多對多。當(dāng)然也包括繼承關(guān)系。
    ??? 而ibatis這方面就比較遜色了,不過對于也支持簡單的關(guān)連查詢,如1對1,和1對多。對于一般的情況來說,這兩種已經(jīng)足夠了,當(dāng)然不能層疊更新是一個(gè)缺陷,看了半天文檔,也沒有找到對象之間的層疊更新,估計(jì)是不支持。
    ??? 以前的版本ibatis處理關(guān)連是通過執(zhí)行兩次sql來實(shí)現(xiàn)的,如下的實(shí)例:
    ??? 一對多關(guān)聯(lián):
    ?

    <sqlMap namespace="User">
    <typeAlias alias="user" type="com.ibatis.sample.User"/>
    <typeAlias alias="address" type="com.ibatis.sample.Address"/>
    <resultMap id="get-user-result" class="user">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="sex" column="sex"/>
    <result property="addresses" column="id" select="User.getAddressByUserId"/>
    </resultMap>
    <select id="getUsers" parameterClass="java.lang.String" resultMap="get-user-result">
    <![CDATA[
    select id,name,sex
    from t_user
    where id = #id#
    ]]>
    </select>
    <select id="getAddressByUserId" parameterClass="int" resultClass="address">
    <![CDATA[
    select address,zipcode
    from t_address
    where user_id = #userid#
    ]]>
    </select>
    </sqlMap>?? ?


    這里通過在resultMap 中定義嵌套查詢getAddressByUserId,我們實(shí)現(xiàn)了關(guān)聯(lián)數(shù)據(jù)的讀取。
    需要注意的是,這里有一個(gè)潛在的性能問題,也就是所謂“n+1”Select問題。
    一對一關(guān)聯(lián):
    對于這種情況,我們可以采用一次Select兩張表的方式,避免這樣的性能開銷(假設(shè)上面示例中,每個(gè)User 只有一個(gè)對應(yīng)的Address記錄):

    ?
    <resultMap id="get-user-result" class="user">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="sex" column="sex"/>
    <result property="address" column="t_address.address"/>
    <result property="zipCode" column="t_address.zipcode"/>
    </resultMap>
    <select id="getUsers" parameterClass="java.lang.String" resultMap="get-user-result">
    <![CDATA[
    select *
    from t_user,t_address
    where t_user.id=t_address.user_id
    ]]>
    </select>
    ??? ?


    在現(xiàn)在的版本中,對于n+1問題,ibatis已經(jīng)很好的解決了。如下的配置:
    一對一
    ?

    <resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
    <result property=”id” column=”PRD_ID”/>
    <result property=”description” column=”PRD_DESCRIPTION”/>
    <result property=”category” resultMap=“get-category-result” />
    </resultMap>
    <resultMap id=”get-category-result” class=”com.ibatis.example.Category”>
    <result property=”id” column=”CAT_ID” />
    <result property=”description” column=”CAT_DESCRIPTION” />
    </resultMap>
    <select id=”getProduct” parameterClass=”int” resultMap=”get-product-result”>
    select *
    from PRODUCT, CATEGORY
    where PRD_CAT_ID=CAT_ID
    and PRD_ID = #value#
    </select>?? ?

    可以使用內(nèi)在的resultMap來解決此問題。
    同樣一對多如下:

    ?
    <sqlMap namespace="ProductCategory">
    <resultMap id=”categoryResult” class=”com.ibatis.example.Category” groupBy=”id”>
    <result property=”id” column=”CAT_ID”/>
    <result property=”description” column=”CAT_DESCRIPTION”/>
    <result property=”productList” resultMap=”ProductCategory.productResult”/>
    </resultMap>
    <resultMap id=”productResult” class=”com.ibatis.example.Product”>
    <result property=”id” column=”PRD_ID”/>
    <result property=”description” column=”PRD_DESCRIPTION”/>
    </resultMap>
    <select id=”getCategory” parameterClass=”int” resultMap=”categoryResult”>
    select C.CAT_ID, C.CAT_DESCRIPTION, P.PRD_ID, P.PRD_DESCRIPTION
    from CATEGORY C
    left outer join PRODUCT P
    on C.CAT_ID = P.PRD_CAT_ID
    where CAT_ID = #value#
    </select>
    </sqlMap>?? ?


    注意,需要使用增加groupBy屬性來分類

    posted on 2007-01-16 16:22 布衣郎 閱讀(5487) 評論(8)  編輯  收藏 所屬分類: orm

    FeedBack:
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-01-17 09:49 | 實(shí)用主義
    ibatis 最主要的作用是什么,LZ還不知道呀,不要白讀書呀  回復(fù)  更多評論
      
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-01-17 10:41 | 布衣郎
    @實(shí)用主義
    既然是半成品的orm,當(dāng)然不能完全只是依賴于sql和存儲(chǔ)過程,那還不如直接去用jdbc了。  回復(fù)  更多評論
      
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-05-22 10:28 | murphy
    你好,我在做ibatis時(shí)使用你所提到的方法,但是出現(xiàn)了問題,提示是無法找到類似你提到的1:1關(guān)系中的get-category-result,不知道是什么原因呢?

    附:
    --- The error happened while setting a property on the result object.
    --- Cause: com.ibatis.sqlmap.client.SqlMapException: There is no result map named getPartByID in this SqlMap.
      回復(fù)  更多評論
      
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-05-22 15:35 | 布衣郎
    @murphy
    你沒有定義getPartByID這個(gè)SqlMap,仔細(xì)看看你的配置文件  回復(fù)  更多評論
      
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-05-23 10:12 | murphy
    你好,已經(jīng)配置了,就是因?yàn)榕渲昧诉€不行啊.
    附:
    <resultMap id="getPartByID" class="com.****.domain.Part">
    <result property="part_ID" column="part_ID"/>
    <result property="part_Code" column="part_Code"/>
    <result property="part_Name" column="part_Name"/>
    </resultMap>

    ---------------------------------------------------------------
    <resultMap id="pdpList" class="pdp">
    <result property="pdp_ID" column="pdp_ID"/>
    <result property="pdp_Code" column="pdp_Code"/>
    <result property="pdp_Charge" column="pdp_Charge"/>
    <result property="part" resultMap="getPartByID"/>
    .............................
    </resultMap>   回復(fù)  更多評論
      
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-05-23 14:49 | 布衣郎
    你的Part中的屬性也是part_ID,part_Code,而不是字段名稱嗎?  回復(fù)  更多評論
      
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-05-25 11:33 | murphy
    Part中屬性和數(shù)據(jù)庫中的字段是基本對應(yīng)的,這和找不到Map有什么直接關(guān)系嗎?  回復(fù)  更多評論
      
    # re: ibatis 對象關(guān)系實(shí)現(xiàn)
    2007-05-25 15:40 | 布衣郎
    有可能,主要的問題在于part_ID這個(gè)命名,以前beanutils對于兩個(gè)連寫的大寫字符有個(gè)小bug,解析不了。要不換換看看。  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    <2007年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357227
    • 排名 - 155

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品久久无码av片俺去也| 日本高清免费中文在线看| 亚洲冬月枫中文字幕在线看| 亚洲乱色熟女一区二区三区蜜臀| 精品国产免费人成电影在线观看| 亚洲美女aⅴ久久久91| 99xxoo视频在线永久免费观看| 亚洲JIZZJIZZ中国少妇中文| 4480yy私人影院亚洲| 37pao成人国产永久免费视频| 亚洲精品第五页中文字幕| 综合在线免费视频| 亚洲精品你懂的在线观看 | 国产AV旡码专区亚洲AV苍井空 | 最近中文字幕免费2019| 亚洲日韩国产精品乱| 亚洲综合色婷婷在线观看| 久久国产乱子免费精品| 亚洲男人的天堂在线播放| 1000部拍拍拍18勿入免费凤凰福利| 亚洲国产日韩女人aaaaaa毛片在线 | 人妻丰满熟妇无码区免费| 亚洲欧洲日产国码www| 成人免费午夜视频| 亚洲成av人片不卡无码| 免费观看黄网站在线播放| 国产亚洲精品第一综合| 国产在线观看免费观看不卡| 久久久亚洲欧洲日产国码是AV | 美女扒开屁股让男人桶爽免费| 亚洲伊人成无码综合网| 久久国产精品萌白酱免费| 亚洲啪AV永久无码精品放毛片| 亚洲国产精品无码久久久久久曰| 九九精品成人免费国产片| 美女视频黄免费亚洲| 亚洲日韩乱码中文无码蜜桃臀网站| 日本免费网站视频www区| 黄色免费网址在线观看| 亚洲精品乱码久久久久久下载| 情侣视频精品免费的国产|