[英]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.