1. 程式人生 > >使用mybatis查出資料與mysql查出來的不一致(order by)

使用mybatis查出資料與mysql查出來的不一致(order by)

最近在練習easyui的時候做到datagrid的時候 用到點選欄位進行 降序,升序 的時候發現無論怎麼點 資料都不會變,

開始以為是easyui-datagrid中配置錯了,改了半天也沒有發現.  然後去看了下mybatis發出的sql和查詢結果.


查出來才發現 不是easyui的錯,而是查詢出來的結果都一樣.然後又去mysql中查了一下.發現mysql中查出來沒有問題


然後我就懵了,都是一樣的sql為啥查出來的不一樣,找了半天的度娘也沒有解決辦法.後來問群裡大佬才知道是sql注入出錯,最簡單的問題.

mapper.xml檔案中


這裡用了#,應該是用$.    這裡因為我要查詢 是根據一個數據庫欄位名 所以應該用$

 ${ } 變數的替換階段是在動態 SQL 解析階段,而 #{ }變數的替換是在 DBMS 中。

 #{} 和 ${}主要的區別,除此之外,還有以下區別:

  • #方式能夠很大程度防止sql注入。
  • $方式無法防止Sql注入。
  • $方式一般用於傳入資料庫物件,例如傳入表名.
  • 一般能用#的就別用$.

 當我將mapper,xml檔案的# 替換 為 $的時候  ,再看mybatis發出的sql語句 

 $,和#的區別就明顯出來了

之前:


之後;


看到區別 就和上面所說 :    ${ } 變數的替換階段是在動態 SQL 解析階段

以後一定要仔細,,,