MyBatis 关于order by失效

  order by作为一个常用的功能,在项目中应该经常用到。

  今天在实现根据传入排序指标参数进行排序时,遇到order by没有生效问题。

 起先SQL如下:

 

 我用的是 (1):#运算符,Mybatis会将传入的对象当成一个字符串,在进行变量替换时会加上引号

比如rankingMethod="time", sql语句是

ODERR BY "time" DESC

正常应该是 ODERR BY time DESC    不要双引号!

那该怎么改呢?

方法:

一:不用#,(2):使用$运算符,Mybatis不会进行预编译,直接把值传进去,无法防止sql注入

 二:用枚举 

 参数少的时候方便,而且没有sql注入隐患

最后来总结下#和$

  1. 预编译sql有缓存作用,非预编译没得
  2. 预编译一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止sql注入。
  3. $方式一般用于传入数据库对象,例如传入表名、排序规则等
  4. 一般能用#的就别用$

 深入了解:http://www.cnblogs.com/yanspecial/p/5659429.html

猜你喜欢

转载自blog.csdn.net/shuzishij/article/details/84334913