gpt4 book ai didi

java - MyBatis - 在 foreach 中绑定(bind)参数

转载 作者:行者123 更新时间:2023-12-04 11:10:06 26 4
gpt4 key购买 nike

我发现 mybatis 存在以下问题: SQL parameter substitution functionality differs substantially from string substitution functionality .

是否存在解决方法,例如。在 #{} 表达式中使用 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>

不太好,但有效。

关于java - MyBatis - 在 foreach 中绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29296696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com