首先,我个人还是推崇将所有的sql都写到xml里面去,比较直观易读,以便于维护。
当然,不排除维护一些老项目,或者其它神仙队友喜欢这么写。
今天在一个项目上增加接口,发现先驱们都是把sql写到注解里面的,我也就这么写了。sql里面需要传参,参数判断空时,需要用到<if>
表达式,测试时发现怎么都有问题,命名是空,但if居然还进了我的sql。
最后,通过将所有的sql包裹在<script></script>
内解决了问题
例如
@Update("update xxx set ... where 1=1 <if test=\" != null\">and id = #{}</if>")
void updateByParam(@Param("req")A req);
改成
@Update("<script>update xxx set ... where 1=1 <if test=\" != null\">and id = #{}</if></script>")
void updateByParam(@Param("req")A req);