使用mybatis查出資料與mysql查出來的不一致(order by)
阿新 • • 發佈:2018-12-27
最近在練習easyui的時候做到datagrid的時候 用到點選欄位進行 降序,升序 的時候發現無論怎麼點 資料都不會變,
開始以為是easyui-datagrid中配置錯了,改了半天也沒有發現. 然後去看了下mybatis發出的sql和查詢結果.
查出來才發現 不是easyui的錯,而是查詢出來的結果都一樣.然後又去mysql中查了一下.發現mysql中查出來沒有問題
然後我就懵了,都是一樣的sql為啥查出來的不一樣,找了半天的度娘也沒有解決辦法.後來問群裡大佬才知道是sql注入出錯,最簡單的問題.
mapper.xml檔案中
這裡用了#,應該是用$. 這裡因為我要查詢 是根據一個數據庫欄位名 所以應該用$
${ } 變數的替換階段是在動態 SQL 解析階段,而 #{ }變數的替換是在 DBMS 中。
#{} 和 ${}主要的區別,除此之外,還有以下區別:
- #方式能夠很大程度防止sql注入。
- $方式無法防止Sql注入。
- $方式一般用於傳入資料庫物件,例如傳入表名.
- 一般能用#的就別用$.
當我將mapper,xml檔案的# 替換 為 $的時候 ,再看mybatis發出的sql語句
$,和#的區別就明顯出來了
之前:
之後;
看到區別 就和上面所說 : ${ } 變數的替換階段是在動態 SQL 解析階段
以後一定要仔細,,,