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 ?