ibatisのGroup By属性の使用

4614 ワード

ibatisのgroupbyは,データをツリー構造,ディレクトリ構造などに示すのに多くの用途がある.
ibatisの使い方:
次のようにresultMapを定義します.
<resultMap id="SpreadGroupByPackageID" class="TChannelProduct"   
       groupBy="productId,channelId

"> 
       
        <result property="productId" column="productId"

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

" />
  
        <result property="channelProductlist" resultMap="cn.emag.product.domain.TChannelProduct.subchannelProduct

" />  
    </resultMap>  

もう一つresultMapは、次のような内容です.
<resultMap id="subchannelProduct

" class="TChannelProduct">  
        <result property="id" column="id" />
        <result property="spreadStartTime" column="spreadStartTime" />
        <result property="spreadEndTime" column="spreadEndTime" />
        <result property="productPageUrl" column="productPageUrl" />
        <result property="productTargetUrl" column="productTargetUrl" />
        <result property="isReferValid" column="isReferValid" />
        <result property="businessMdId" column="businessMdId" />
        <result property="bcidCode" column="bcidCode" />
        <result property="productType" column="productType" />
        <result property="balanceChannelId" column="balanceChannelId" />
        <result property="businessMdName" column="businessMdName" />
        <result property="businessMdCode" column="businessMdCode" />
        <result property="productId" column="productId" />
        <result property="channelId" column="channelId" />
        <result property="spreadState" column="spreadState" />
        <result property="channelName" column="channelName" />
        <result property="channelCorpType" column="channelCorpType" />
        <result property="companyCode" column="companyCode" />
        <result property="companyName" column="companyName" />
    </resultMap> 
 
 
sql内容:
<select id="findSpreadGroupByPackageID" parameterClass="map" resultMap="SpreadGroupByPackageID">
select
cp.id  as id,
cp.spread_start_time as spreadStartTime,
cp.spread_end_time   as spreadEndTime,
cp.product_page_url as productPageUrl,
cp.Product_Target_Url  AS productTargetUrl,
cp.is_refer_valid as isReferValid,
cp.business_md_id as businessMdId,
CP.Bcid_Code AS bcidCode,
cp.product_type AS productType,
cp.balance_channel_id AS balanceChannelId,
bu.business_model_name as businessMdName,
bu.business_model_code as businessMdCode,
CP.PACKAGE_ID AS PRODUCTID

,
cp.channel_id as channelId

,
cp.SPREAD_STATE as spreadState,
ci.channel_name  as channelName,
ci.CHANNEL_CORP_TYPE as channelCorpType,
cc.company_code  as companyCode,
cc.company_name_cn as companyName
from T_CHANNEL_PRODUCT_REF cp,
     t_channel_info   ci,
     t_channel_corp   cc,
     t_channel_busi_model bu
where cp.channel_id = ci.id and ci.corp_id = cc.company_code and  cp.business_md_id = bu.id and cp.Spread_State <![CDATA[<>]]> 2 
	</select>

実現した効果は,packageidとchannelidのデータを同じlistに格納することである.
Packageidはchannelidとグループ化されているため、値はlistのデータを取得する必要がありますが、resultMapのリーフはpackageidとchannelidを加算する必要があります.そうしないと効果はありません..つまり、上の文では、赤字部分はなくさないように気をつけなければなりません.
実際にパケットの実装はデータベースで実装されるのではなく、すべてのデータを検出してibatisのコードで実装されるので、ページングクエリが必要な場合..それはibatisパケット処理後、必要なデータを検出し、すべてのデータをコードにパケット化するしかありません.悲しい...
いくつかの投稿を見て、関連する実装を検索して、groupbyのresultMapの多くの投稿の中で、パケットのそのデータのpropertyがなくて、何度も試してやっと発見して、今のようなはずです.