动态SQL的注意事项

动态SQL的注意事项

在mybatis的动态sql中,我们可能会对一些数据进行比较大于>小于<,不过因为这些比较操作要写在xml文件中,就有可能导致xml文件解析出现问题,此时可以使用实体符号代替。

原符号      实体符号
  <         &lt;
  <=        &lt;=
  >         &gt;
  >=        &gt;=
  &         &amp;
  "         &quot;
  '         &apos;

这里要强调的一点是小于号<,一定不能在mapper中出现,否则一定会报错。

示例:

<select id="selectIf" resultType="student">
    SELECT id,name,age,score
    FROM t_student
    WHERE 1=1
    <if test="name != null and name != ''">
      AND name LIKE '%' #{name} '%'
    </if>
    <if test="age>=0">
      AND age &gt; #{age}
    </if>
</select>

CDATA

除了使用特殊符号之外,我们还可以将这些数据放到<![CDATA[ ]]>里面,这里面的内容xml是不会解析的。

示例:

<select id="selectIf" resultType="student">
    SELECT id,name,age,score
    FROM t_student
    WHERE 1=1
    <if test="name != null and name != ''">
      AND name LIKE '%' #{name} '%'
    </if>
    <if test="age>=0">
        AND age <![CDATA[ >  ]]> #{age}
    </if>
</select>