使用isEqual

时间:2017-03-15 14:27:05

标签: ibatis

我在尝试使用isEqual从Java地图中读取属性时看到了iBatis的一个非常奇怪的问题,而不是其他iBatis运算符。例如,使用isNotNulliterate时,可以很好地阅读地图属性。 xml:

    <isNotNull property="filterCriteria.account">
        AND
        id
        <isEqual property="filterCriteria.account.meetsCriteria" compareValue="false">
            NOT
        </isEqual>
        IN
        (SELECT DISTINCT id
        FROM account
        WHERE some other criteria....
        )
    </isNotNull>

我们在这里使用的2个java类:

public class SearchProfile {

private Map<String, SearchProfileCriteria> filterCriteria;

public SAOSearchProfile() {
    filterCriteria = new HashMap<>();
}

public Map<String, SAOSearchProfileCriteria> getFilterCriteria() {
    return filterCriteria;
}

public void setFilterCriteria(Map<String, SAOSearchProfileCriteriaBase> filterCriteria) {
    this.filterCriteria = filterCriteria;
}

}

上面是传递给iBatis进行查询的容器对象,下面是将成为地图值的条件对象。在此示例中,它使用字符串"account"

进行键控
public class SearchProfileCriteria {

boolean meetsCriteria;

public String getCriteriaAsString() {
    return StringUtils.getStringValueFromBoolean(meetsCriteria);
}

public boolean isMeetsCriteria() {
    return meetsCriteria;
}

public void setMeetsCriteria(boolean meetsCriteria) {
    this.meetsCriteria = meetsCriteria;
}

public String getSQLString(){
    return meetsCriteria ? "" : "NOT";
}
}

例外:

Cause: com.ibatis.common.beans.ProbeException: There is no READABLE property named 'account' in class 'java.util.Map'; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:

getSQLString()方法是我在解决方案中的半尝试,String在查询中被转义并引发语法错误。

当我删除<isEqual>块时,查询执行find,这表示在检查它时是否能够读取"account"键以查看它是否为空。如上所述,我们还可以使用<iterate>代码中的地图密钥而不会出现问题。似乎<isEqual><isNotEqual>是导致问题的唯一标记。有没有人有这方面的经验或知道可能会发生什么?

1 个答案:

答案 0 :(得分:0)

注意:使用isNotNullisEqualiterate iBatis ,它们不再存在于 Mybatis 中因此,无差别地引用Mybatis令人困惑。

Reference documentation

对于您的问题,如果用类替换Map(在编译时将知道属性)它的行为如何?

或尝试使用<isPropertyAvailable>

解决方法可以使用正确的语法:$而不是#$filterCriteria.account.SQLString$而不是#filterCriteria.account.SQLString#,然后将值连接起来而不是绑定为参数。