1. 程式人生 > >MyBatis 關於order by失效

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