2

context:property-placeholder は良いことですが、一部の Bean 構成でプレースホルダーを使用したくありません

$ {num}文字列を使用したいのと同じプロパティパラメータ。

実行する方法?

お気に入り:

<bean id="Sku.findSkuRelationByCategory" class="loxia.dao.support.DynamicQueryHolder">
    <constructor-arg>
        <value>
    <![CDATA[select 
    r.sku_id as sku_id,
    r.sku_category_id as sku_category_id
                from t_ma_sc_sku_relation r
                where r.sku_id in(#foreach($num in [1..$skuCount]) #if($num == 1) :s${num} #else ,:s${num} #end #end)
                and r.sku_category_id in(#foreach($num in [1..$categoryCount]) #if($num == 1) :c${num} #else ,:c${num} #end #end)
                order by sku_category_id]]>
        </value>
    </constructor-arg>
</bean>
4

1 に答える 1

3

あなたの問題についての私の理解は次のとおりです。プレースホルダーマーカーをエスケープする必要があります

回避策しか使用できないと思います。そのうちの2つを知っています。

  • テキストで使用されていない他の接頭辞と接尾辞を使用するようにプレースホルダー構成を変更します

    <contextroperty-placeholder ....>
         ....
         <property name="placeholderPrefix" value="~{"/>
         <property name="placeholderSuffix" value="}" />
    </contextroperty-placeholder>
    
  • テキストで SpEL 表現 (#{'$'}) を使用して、プレフィックス (プレフィックスではないはずです) を 2 つの部分にスライスします。

    <value>...#if($num == 1) :s#{'$'}num} #else ,:s#{'$'}num} #end #end)....</value>
    

    この 2 番目のアイデアは私からのものではありません。Google で検索して見つけたものです

于 2012-04-21T09:22:41.410 に答える