您好,登錄后才能下訂單哦!
這篇文章主要介紹“mybatis怎么實現數據庫的排序”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“mybatis怎么實現數據庫的排序”文章能幫助大家解決問題。
今天用到了對數據庫按照倒序進行輸出。因為剛接觸mybatis,所以對這方面還不是太了解,再網上搜了好長時間終于找到了一些有用的信息。
我的目標是這樣的,數據庫中的信息分為無效和有效,對數據庫中的信息的有效值按照倒序進行輸出,輸出到表格中,
在網上看到了這樣的語句,SELECT * FROM photo ORDER BY id DESC;于是我就直接拿過來用了,但是卻出現了問題,因為我的是有條件排序的,
嘗試了幾次后我發現是這樣寫的, select
<include refid="Base_Column_List" /> from manager_user where is_valid = 1
ORDER BY id DESC;這樣的話輸出的內容就達到了我的目標,將語句中的desc換成asc就可以進行升序排序
在使用MyBatis解析xml進行排序的時候,遇見排序無效的問題!
#將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #{user_id},如果傳入的值是111,那么解析成sql時的值為order by “111”, 如果傳入的值是id,則解析成的sql為order by “id”。
$將傳入的數據直接顯示生成在sql中。如:order by ${user_id},如果傳入的值是111,那么解析成sql時的值為order by 111, 如果傳入的值是id,則解析成的sql為order by id。
$方式無法防止Sql注入。
$方式一般用于傳入數據庫對象,例如傳入表名。
一般能用#的就別用$。
附解決代碼段:
其中orderByField就是傳入進行排序的參數值!
<choose> <when test="orderByField != null and orderByField !=''"> <choose><when test="isAsc == true"> order by ${orderByField} ASC </when> <otherwise> order by ${orderByField} DESC </otherwise></choose> </when> <otherwise> order by id DESC
</otherwise></choose>
ORDER BY <choose> <when test="sort!=null"> #{sort,jdbcType=VARCHAR} <if test="order!=null"> #{order,jdbcType=VARCHAR} </if> </when> <otherwise> id asc , create_time asc </otherwise> </choose>
原因是: #{order,jdbcType=VARCHAR},MyBatis會自動將排序字段當成一個字符串,等同于order by ‘create_time’ ‘desc’,可以通過執行,但無效,與order by create_time desc結果不同
解決方法: 使用order,Mybatis會將其視作直接變量,變量替換成功后,不會再加上引號成為字符串,同樣排序順序也一樣
{order},因此
ORDER BY <choose> <when test="sort!=null"> ${sort} <if test="order!=null"> ${order} </if> </when> <otherwise> id asc , create_time asc </otherwise> </choose>
#能很大程度的防止SQL注入 $無法防止Sql注入 $用于傳入數據庫對象 <![CDATA[]]>,在該符號內的語句,不會被當成字符串來處理,而是直接當成sql語句,比如要執行一個存儲過程。
在mapper文件中寫sql語句時,遇到特殊字符時,如:< > 等,建議使用
關于“mybatis怎么實現數據庫的排序”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。