前端向後端傳入參數實現字段排序,參數信息正常,但是後臺數據庫查詢返回的結果未排序

問題

前端向後端傳參數,後端用自己封裝的實體類Page來接收,目的是爲了實現根據前端傳入的字段sort和order進行正序或倒序排序,log日誌顯示傳入的參數信息正常,但是查詢返回的結果並沒有進行排序,查詢的sql語句如下:

<select id="getAllUsers" resultMap="BaseResultMap" parameterType="com.hrms.utils.Page">
	select * 
	from tb_staff
	order by #{sort} #{order}
	limit #{offset},#{limit}
</select>

使用#{}的日誌信息

解決方式

#改成$,即${sort} ${order},正確的sql語句爲:

<select id="getAllUsers" resultMap="BaseResultMap" parameterType="com.hrms.utils.Page">
	select * 
	from tb_staff
	order by ${sort} ${order}
	limit #{offset},#{limit}
</select>

使用${}的日誌信息

原因

#{}:佔位符,防止sql注入,但是替換結果會加上單引號。
${}:拼接符,無法防止sql注入,但是替換結果不會加單引號
很明顯,無法正確排序就是因爲#{sort}#{order}替換結果被加上單引號,sql語句變成select * from tb_staff order by 'truename' 'asc' limit 0,5

總結

  1. 使用order by 動態參數進行排序時,要用${}。(${}一般用於傳入數據庫對象,比如表字段名、表名等)
  2. #{}可防止sql注入,能用#{}就別用${}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章