问题
1.注意sql语句结束不要;号
<select>
select * from user where;// 错误写法
select * from user where// ✔
</select>
2.mybatis.xml中大于号,小于号不能解析问题,使用<![CDATA[ < ]]>包住就可以使用了。
3.使用动态sql和<![CDATA[ ]]>结合注意不要把动态sql写在里面,那样无法解析
<if test="endDate!=null and endDate!=''">
AND o.deliverDate <![CDATA[ < ]]> DATE_FORMAT( #{endDate}, '%Y-%m-%d %H:%i:%s' )
</if>
<if test="startDate != null and startDate != ''">
AND o.deliverDate <![CDATA[ >= ]]> DATE_FORMAT( #{startDate}, '%Y-%m-%d %H:%i:%s')
</if>
以上代码还有一个问题,像日期这种一般是date的类型,如果按字符串判断,会报错
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
所以要注意类型,date就不用像字符串判断是不是空串了。
<if test="endDate!=null ">
AND o.deliverDate <![CDATA[ < ]]> DATE_FORMAT( #{endDate}, '%Y-%m-%d %H:%i:%s' )
</if>
<if test="startDate != null ">
AND o.deliverDate <![CDATA[ >= ]]> DATE_FORMAT( #{startDate}, '%Y-%m-%d %H:%i:%s')
</if>