为什么80%的码农都做不了架构师?>>>   
第一种方法:用转义字符(注:对大小写敏感! )
用了转义字符把>和<替换掉,然后就没有问题了。
SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE
附:XML转义字符
| 显示结果 | 描述 | 实体名称 | 实体编号 | 
|---|---|---|---|
| 空格 |   |   | |
| < | 小于号 | < | < | 
| > | 大于号 | > | > | 
| & | 和号 | & | & | 
| " | 引号 | " | " | 
| ' | 撇号 | ' (IE不支持) | ' | 
第二种方法:<![CDATA[ ]]>
| 因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 ,如下: <update id="reduceNumber">UPDATE seckillSET number = number-1WHERE seckill_id=#{seckillId}AND start_time <![CDATA[ <= ]]> #{killTime} AND end_time >= #{killTime}AND number > 0;
</update> | 
注意点:有动态语句(where,if)的情况,where,if 条件不能放在<![CDATA[ ]]>中,否则将导致无法识别动态判断部分,导致整个sql语句非法.应该缩小范围,只对有字符冲突部分进行合法性调整
错误的形式:以下where 放在<![CDATA[ ]]>中
<select id="getAccountErrorCount" resultType="int" parameterType="map">  <![CDATA[ select count(*) from t_acctreg_accounterror <where> <if test="enddate != null and enddate != ''"> createdate <= #{enddate} </if> <if test="acctno != null and acctno != ''"> AND acctno LIKE '%'#{acctno}'%' </if> </where> ]]>  
</select>  正确的形式:
<select id="getAccountErrorCount" resultType="int" parameterType="map">  select count(*) from t_acctreg_accounterror  <where>  <if test="enddate != null and enddate != ''">  <![CDATA[createdate <= #{enddate}]]>  </if>  <if test="acctno != null and acctno != ''">  <![CDATA[AND acctno LIKE CONCAT('%',#{acctno},'%')]]>  </if>  </where>  
</select>  补充说明:like的以上两种写法,都是可以的
LIKE '%'#{acctno}'%'
LIKE CONCAT('%',#{acctno},'%')