1. 程式人生 > >mybatis 註解 動態sql所遇之坑

mybatis 註解 動態sql所遇之坑

         相信很多同學很少遇見這種,也很少用到這種,因為這種寫法有點噁心。但是遇到了就要解決啊,網上搜了一堆,都是int,不知道是有意還是無意的,例子如下:

 @Select("<script>"             + "select a.* from pub_info a where a.company_id=#{companyId}  and  a.type_id=#{typeId} and a.status=1  order by a.createtime desc "             + "<if test='num>0'>"             + "limit 0,#{num}"             + "</if>"             + "</script>")

public List<T> custom(@Param("companyId")Long companyId,@Param("typeId")Integer typeId,@Param("num")Integer num);

這樣寫是完成沒問題的,但是,但是,但是,重要的事情說三遍,如果欄位型別是string了怎麼辦。為什麼說這種寫法噁心,就源於字串裡面拼xml,相信大家被xml裡的很多特殊字元坑過,這裡就不多說了,直接上正確寫法:

@Select("<script>"             + "select a.* from pub_info a where a.company_id=#{companyId}  and a.status=1  order by a.createtime desc "             + "<if test='dbtype!=\"mysql\"'>"             + "limit 0,#{num}"             + "</if>"             + "</script>")

public List<T> custom(@Param("companyId")Long companyId,@Param("dbtype")String dbtype,@Param("num")Integer num);

Ps:test裡面的字串的雙引號要轉義,不要想著用單引號,我試過了,錯的。。。

好了就給大家分享到這裡。gl。