mybatis動態sql排序無效問題

2021-09-19 09:03:35 字數 941 閱讀 6399

在使用mybatis解析xml進行排序的時候,遇見排序無效的問題!

#將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如:order by #,如果傳入的值是111,那麼解析成sql時的值為order by 「111」, 如果傳入的值是id,則解析成的sql為order by 「id」。

$將傳入的資料直接顯示生成在sql中。如:order by $,如果傳入的值是111,那麼解析成sql時的值為order by 111, 如果傳入的值是id,則解析成的sql為order by id。

order by 字段,在用動態sql時會出現問題,排序無效,而且在日誌裡查詢不到,不能發現這個錯誤。

通常,咱們的動態sql一般都會用#代替$,因為#可以防止sql注入問題。

但是在order by的字段裡,如果繼續用#,那麼排序會無效。這個時候只能用$代替#。

#將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如:order by #,如果傳入的值是111,那麼解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id"

$將傳入的資料直接顯示生成在sql中。如:order by $,如果傳入的值是111,那麼解析成sql時的值為order by 111, 如果傳入的值是id,則解析成的sql為order by id

#方式能夠很大程度防止sql注入。

$方式法防止sql注入。

$方式一般用於傳入資料庫物件,例如傳入表名。

一般能用#的就別用$

mybatis 動態排序

mybatis動態排序目前知道的方式有兩種 1.通過pagehelper com.github.pagehelper pagehelper 版本5.1.4 stringbuffer orderby new stringbuffer 欄位名稱 排序方式 pagehelper.startpage vo....

mybatis 動態sql詳解

內容 轉到原網頁insert into t blog title,content,owner values select from t blog where id update t blog set title content owner where id select from t blog se...

mybatis入門 動態sql

mybatis核心就是對sql語句進行靈活操作,通過表示式進行判斷,對sql進行靈活拼接 組裝。現有需求如下 需要查詢使用者,輸入的是使用者類,如果使用者的性別類不為空,則將性別作為查詢條件之一,如果使用者的姓名不為空,則將使用者姓名作為查詢條件之一。如果使用者兩個屬性都為空,則查詢所有使用者。將上...