ibatisのGroup By属性の使用
4614 ワード
ibatisのgroupbyは,データをツリー構造,ディレクトリ構造などに示すのに多くの用途がある.
ibatisの使い方:
次のようにresultMapを定義します.
もう一つresultMapは、次のような内容です.
sql内容:
実現した効果は,packageidとchannelidのデータを同じlistに格納することである.
Packageidはchannelidとグループ化されているため、値はlistのデータを取得する必要がありますが、resultMapのリーフはpackageidとchannelidを加算する必要があります.そうしないと効果はありません..つまり、上の文では、赤字部分はなくさないように気をつけなければなりません.
実際にパケットの実装はデータベースで実装されるのではなく、すべてのデータを検出してibatisのコードで実装されるので、ページングクエリが必要な場合..それはibatisパケット処理後、必要なデータを検出し、すべてのデータをコードにパケット化するしかありません.悲しい...
いくつかの投稿を見て、関連する実装を検索して、groupbyのresultMapの多くの投稿の中で、パケットのそのデータのpropertyがなくて、何度も試してやっと発見して、今のようなはずです.
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がなくて、何度も試してやっと発見して、今のようなはずです.