mybatis插入查询中的if语句

时间:2018-07-25 12:51:24

标签: sql if-statement mybatis

我想知道如何将if语句放入插入SQL查询中。我只想插入两个参数(CODRIC和PROGRIC),如果它们不为null。我写这样的东西

INSERT
        INTO
            ${schema}.I9TB1000
            (
                I9TB1000_PROGR,
                I9TB1000_DATARIF,
                I9TB1000_STATO,
                I9TB1000_STATOP,
                I9TB1000_FUNZ,
                I9TB1000_CODRIC,
                I9TB1000_PROGRIC,
                I9TB1000_INSMATR,
                I9TB1000_INSTERM
            )
            VALUES( 
                NEXT VALUE FOR ${schema}.I9TB001S,
                (SELECT
                    I9TB1000_DATARIF
                FROM
                    ${schema}.I9TB1000
                WHERE
                    I9TB1000_PROGR =
                    (
                        SELECT
                            MAX (I9TB1000_PROGR)
                        FROM
                            ${schema}.I9TB1000)),
                (   SELECT
                        COALESCE(I9TBFUNZ_STA_TO,#{i9TB1000_STATOP, jdbcType=INTEGER})
                    FROM
                        ${defaultSchema}.I9TBFUNZ
                    WHERE
                        I9TBFUNZ_FUNZ = #{i9TB1000_FUNZ, jdbcType=INTEGER} ), 
                #{i9TB1000_STATOP, jdbcType=INTEGER},
                #{i9TB1000_FUNZ, jdbcType=INTEGER},
                <if test="i9TB1000_CODRIC != null">
                    #{i9TB1000_CODRIC, jdbcType=CHAR},
                </if>
                <if test="i9TB1000_PROGRIC != null">
                    #{i9TB1000_PROGRIC, jdbcType=INTEGER},
                </if>
                #{insMatr, jdbcType=CHAR},
                #{insTerm, jdbcType=CHAR}
            )

我接受-117分配的值数与指定或隐含的列数不相同。看来mybatis无法阅读if语句...有人可以向我解释为什么?
谢谢你

1 个答案:

答案 0 :(得分:2)

错误消息说明了一切。值的数量与要插入的列数不匹配。 您还需要将if添加到列列表中:

INSERT INTO table (
      ... other columns ...,
      <if test="i9TB1000_CODRIC != null">
          I9TB1000_CODRIC,
      </if>
      <if test="i9TB1000_PROGRIC != null">
      I9TB1000_PROGRIC,
      </if>
      ... other columns ...
) VALUES (
     ... values ...
)