Java MyBatis过滤器建筑不喜欢IN子句

Java MyBatis过滤器建筑不喜欢IN子句,java,xml,mybatis,Java,Xml,Mybatis,因此,我通过让用户创建自己的条件来构建自己的过滤。到目前为止,一切都很好,直到我需要在子句中添加 Mapper.xml <select id="selectResultCount" parameterType="Filter" resultType="long"> SELECT COUNT(rank) FROM ${view} <where> <if test="conditions != n

因此,我通过让用户创建自己的条件来构建自己的过滤。到目前为止,一切都很好,直到我需要在子句中添加

Mapper.xml

 <select id="selectResultCount"
        parameterType="Filter"
        resultType="long">
    SELECT COUNT(rank)
    FROM ${view}
    <where>
        <if test="conditions != null">
            <foreach collection="conditions"
                     item="condition"
                     open=""
                     separator=" AND "
                     close="">
                <if test="condition.operator.value.toString() == 'IN'">
                    ${condition.lhs} in
                    <foreach collection="condition.getRhsCondition()" item="rhs" open="(" close=")" separator=",">
                        '${rhs}'
                    </foreach>
                </if>
                ${condition.lhs} ${condition.operator.value} #{condition.rhs}
            </foreach>
        </if>
    </where>

</select>

当然,这个示例只返回了结果的数量,但问题仍然存在。为什么Mybatis不像
中的
,我有什么办法可以绕过它

您的条件在查询中放置了两次

一次由if内的代码正确执行,另一次由if语句后的代码正确执行

您的查询以“MY_COLUMN IN?”结束:


谢谢你向我指出这一点。我为每个查询创建了单独的if语句,并使其成功运行。
 org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'MY_COLUMN'.
### The error may exist in mybatis-mapper.xml
### The error may involve mapper.selectResultCount-Inline
### The error occurred while setting parameters
### SQL: SELECT COUNT(rank)         FROM MY_TABLE          WHERE MY_COLUMN in                         (                             'PARAM1'                         ,                             'PARAM2'                         )                                          MY_COLUMN IN ?
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'MY_COLUMN '.
SELECT COUNT(rank) FROM MY_TABLE WHERE MY_COLUMN in ('PARAM1','PARAM2') MY_COLUMN IN ?