order by作为一个常用的功能,在项目中应该经常用到。
今天在实现根据传入排序指标参数进行排序时,遇到order by没有生效问题。
起先SQL如下:
我用的是 (1):#运算符,Mybatis会将传入的对象当成一个字符串,在进行变量替换时会加上引号
比如rankingMethod="time", sql语句是
ODERR BY "time" DESC
正常应该是 ODERR BY time DESC 不要双引号!
那该怎么改呢?
方法:
一:不用#,(2):使用$运算符,Mybatis不会进行预编译,直接把值传进去,无法防止sql注入
二:用枚举
参数少的时候方便,而且没有sql注入隐患
最后来总结下#和$
- 预编译sql有缓存作用,非预编译没得
- 预编译一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止sql注入。
- $方式一般用于传入数据库对象,例如传入表名、排序规则等
- 一般能用#的就别用$。