mybatis 注解 动态sql 所遇之坑
程序员文章站
2022-03-24 12:36:36
...
相信很多同学很少遇见这种,也很少用到这种,因为这种写法有点恶心。但是遇到了就要解决啊,网上搜了一堆,都是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。