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

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

今天在修改别人的代码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.${}在预编的时候会直接被变量替换,但是存在被注入的问题,表名必须用${},因为#{}在预编的时候会被解析为?占位符,但当被变量替换的时候会加上 ‘’单引号,表明不允许加单引号(但是反引号``是可以的)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,715评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,846评论 0 11
  • 我知道, 今夜所有的交集 都是从十月的风里走来的, 那欢喜迎面的故人, 眼神中闪烁着期待, 月光下写着莲清云白, ...
    白乐随心阅读 216评论 0 1
  • 我自己的大脑喜欢什么呢? 新的事物,知识。 简单的事物容易让我分心,比如新闻?也可能是在我做不愿意做的事情的时候才...
    admwtpgjdpw阅读 239评论 0 0