簡體   English   中英

MyBatis - 在foreach中綁定參數

[英]MyBatis - bind in foreach for parameter

我發現以下mybatis問題: SQL參數替換功能與字符串替換功能有很大不同

是否存在變通方法,例如。 #{}表達式中使用java代碼(靜態方法?)?

我需要創建以下語句:

<foreach item="c" collection="filter.getFilter()" separator=" AND " open="(" close=")">
    <bind name="column" value="_parameter.mappingWhere(c.colCode)"/>
    <bind name="operator" value="_parameter.conditionOperator(c.condition)"/>
    <bind name="value" value="_parameter.conditionValue(c.condition, c.value)"/>
        ${column} ${operator} #{value}
</foreach>  

但該始終采用最后一個值。

我在參數類中創建了一個項目的擴展,它只包裝了所有方法:

    class MyItem extends Item {

    public MyItem (Item pxFilterItem) {
        super();
        setColCode(pxFilterItem.getColCode());
        setColHeader(pxFilterItem.getColHeader());
        setCondition(pxFilterItem.getCondition());
        setJsonCls(pxFilterItem.getJsonCls());
        setJsonValue(pxFilterItem.getJsonValue());
        setValue(pxFilterItem.getValue());
    }

    public String getSqlColumn(){
        return mappingWhere((String) getColCode());
    }

    public String getSqlOperator(){
        return conditionOperator(getCondition());
    }

    public Object getSqlValue(){
        return conditionValue(getCondition(), getValue());
    }
}

,在執行查詢之前用新的替換原始對象:

    List<Item> myList = new ArrayList<Item>();
    for (Item item: filter.getFilter()) {
        MyItem myItem = new MyItem(item);
        myList.add();
    }
    this.filter.setFilter(myList);

並重寫了查詢:

        <foreach item="c" collection="filter.getFilter()" separator=" AND " open="(" close=")">
            ${c.sqlColumn} ${c.sqlOperator} #{c.sqlValue}
        </foreach>            

不是很好,但有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM