mybatis里动态查询条件

前端传入一个数组条件(data),如下:

{
    "userId": "10000",
    "password": "123456",
    "option": 2,
    "data":"(0,1)",
    "index": 1,
    "pageSize": 4
}

通过Controller接收,如下:

    @RequestMapping(value = "/apiGetOpinions", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    public List<OpinionDomain> getOpinions(@RequestBody Map<String, Object> loginInfo){

        // 初始化舆情列表对象

        OpinionDomain  opinion = new OpinionDomain();

        // 设置舆情查询条件(userId,index,pagesize)
        opinion.setUserId((String) loginInfo.get("userId"));
        opinion.setPositiveId(-1);
        opinion.setCurrIndex((Integer) loginInfo.get("index"));
        opinion.setPageSize((Integer) loginInfo.get("pageSize"));

        int option = (Integer) loginInfo.get("option");
        switch (option){
            case 0:
                opinion.setSort((Integer) loginInfo.get("data"));
                break;
            case 1:
                opinion.setPositiveId((Integer) loginInfo.get("data"));
                break;
            case 2:
                opinion.setCondition("  AND so.positive_id IN " + (String) loginInfo.get("data"));
                break;
        }

        List<OpinionDomain> opinions = new ArrayList<>();
        opinions = opinionService.getOpinionByUserId(opinion);
        return opinions;
    }

其中opinion.setCondition(" AND so.positive_id IN " + (String) loginInfo.get("data"))拼接了一个动态查询条件,使用的mapper.xml代码如下:

<select id="getOpinionByUserId" resultType="com.bensu.sentiment.domain.OpinionDomain">
        SELECT
            so.opinion_id,
            so.title,
            so.summarize,
            so.positive_id,
            so.origin_id,
            IFNULL(uo.likes,0)*1 AS likes,
            so.create_date
        FROM
            user_opinion uo,
            sentiment_opinion so
        WHERE uo.user_id = #{userId}
            <if test="positiveId >= 0">
                AND positive_id = #{positiveId}
            </if>
            <if test="condition != null and condition !=''">
                 #{condition}
            </if>
            AND uo.opinion_id = so.opinion_id
            <if test="sort ==1">
                ORDER BY create_date ASC
            </if>
            <if test="sort !=1">
                ORDER BY create_date DESC
            </if>
        <if test="pageSize !=0">
            LIMIT #{currIndex}, #{pageSize}
        </if>
    </select>
        <if test="condition != null and condition !=''">
             #{condition}
        </if>
就是这两行了,但是在运行中好像没有编译成正常SQL条件,所以正确的查询结果一直出不来。
请大神指教,这动态条件改怎么处理!

首先不建议你这样写代码,乱哄哄的。问题出现在这里:

#{condition}

你的condition应该是直接拼在sql中的,不应该用#,#是预编译,在sql中相当于?,这里应该用$代替#。