美文网首页
mybatis踩坑之——foreach循环嵌套if判断

mybatis踩坑之——foreach循环嵌套if判断

作者: 超人有点忙 | 来源:发表于2017-10-30 15:12 被阅读0次

作为小猿一枚,记录一下工作中踩过的坑。

今天在修改别人的代码bug时,有一个需求是在做导出excel功能时,mybatis动态构建sql语句的时候,要根据传进来的map中的一个值来判断是不是null,从而需要关联另一张表取得数据。

<select id="getFieldsValue" parameterType="java.util.Map" resultType="java.util.HashMap">
        SELECT
        <foreach collection="colList" item="col" index="index" separator=",">
            <if test="optionList[index] != 'null'">
                ${col}.dic_value as ${col}
            </if>
            <if test="optionList[index] == 'null'">

                ${col}
            </if>
        </foreach>

        FROM
        ${tableName} t
        <foreach collection="optionList" item="option" index="index">
            <if test="option != 'null'">
                left join t_admin_dic_values ${colList[index]} ON t.${colList[index]}=${colList[index]}.id
            </if>
        </foreach>

        WHERE
        t.id IN
        <foreach collection="recordList" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
    </select>

可以看到SELECT后的<forech>循环体是colList,由于我传进来的是一个Map,这里的optionList[index]用的是colList循环的角标,但是我一度忘记了optionList存的是String,所以我之前的判断optionList[index] != null" 一直报错,要加上'null'。

xml文件 $ 和 # 的区别

1.${}在预编的时候会直接被变量替换,但是存在被注入的问题,表名必须用${},因为#{}在预编的时候会被解析为?占位符,但当被变量替换的时候会加上 ‘’单引号,表明不允许加单引号(但是反引号``是可以的)

相关文章

网友评论

      本文标题:mybatis踩坑之——foreach循环嵌套if判断

      本文链接:https://www.haomeiwen.com/subject/wxnppxtx.html