解決mybatis中order by排序無效問題
1、#將傳入的數(shù)據(jù)都當(dāng)成一個字符串,會對自動傳入的數(shù)據(jù)加一個雙引號。如:order by #{user_id},如果傳入的值是111,那么解析成sql時的值為order by '111', 如果傳入的值是id,則解析成的sql為order by 'id'。
2、$將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by ${user_id},如果傳入的值是111,那么解析成sql時的值為order by 111, 如果傳入的值是id,則解析成的sql為order by id。
3、#方式能夠很大程度防止sql注入。
4、$方式無法防止Sql注入。
5、$方式一般用于傳入數(shù)據(jù)庫對象,例如傳入表名。
6、一般能用#的就別用$。
ps: 在使用mybatis中還遇到<![CDATA[]]>的用法,在該符號內(nèi)的語句,將不會被當(dāng)成字符串來處理,而是直接當(dāng)成sql語句,比如要執(zhí)行一個存儲過程。
所以order by 之后要使用$而非#。
補充知識:MyBatis-plus數(shù)據(jù)庫字段排序不準確
目錄標題
1:今天用mybatis-plus進行開發(fā)的時候遇到一個問題,就是用mysql自帶的排序進行數(shù)據(jù)排序的時候,發(fā)現(xiàn)排序的數(shù)據(jù)不準確。
1:今天用mybatis-plus進行開發(fā)的時候遇到一個問題,就是用mysql自帶的排序進行數(shù)據(jù)排序的時候,發(fā)現(xiàn)排序的數(shù)據(jù)不準確。
例如:12還沒有8,4,2大,這就很郁悶了。

后來在網(wǎng)上查了一下,原來是自己給自己挖的坑,數(shù)據(jù)庫排序字段用的是varcher類型,而排序函數(shù)針對的是number類型。

解決方案:
對于mysql和oracle都實用
order by 字段+0
order by 字段*1


因為用的是mybatis-plus,不想寫sql怎么辦呢?那就用自帶的排序函數(shù)嘍。排序字段直接'+1'就Ok了
//倒敘
queryWrapper.orderByDesc('visit_num+1');
以上這篇解決mybatis中order by排序無效問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. MYSQL(電話號碼,身份證)數(shù)據(jù)脫敏的實現(xiàn)2. MYSQL技巧:為現(xiàn)有字段添加自增屬性3. ubuntu下使用SQLite3的基本命令4. Mysql入門系列:MYSQL圖像數(shù)據(jù)的處理5. SQL Server中搜索特定的對象6. Oracle存儲過程與函數(shù)的詳細使用教程7. Oracle10g支持SQL正則表達式8. 一些很有用的SQLite命令總結(jié)9. Mysql入門系列:MYSQL創(chuàng)建、刪除和選擇數(shù)據(jù)庫10. MySQL存儲過程例子(包含事務(wù)、參數(shù)、嵌套調(diào)用、游標循環(huán)等)

網(wǎng)公網(wǎng)安備