今天在使用myBatis使用 select top #{num} * from tableName... 传递动态参数的时候会无法执行SQL语句,报错:'@P0'附近有语法错误。
最后寻得解决方法应该为:select top ${num} * from tableName...
iBatis2对应语法是:#num# 和 $num$。
具体解释如下:
1、#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错。
2、$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了。
3、#方式能够很大程度防止sql注入。
4、$方式无法方式sql注入。
5、$方式一般用于传入数据库对象,例如传入表名。
6、一般能用#的就别用$。