用瞭一段時間的Mybatis瞭,對於$和#的用法老是很迷糊,特此記下加深記憶。
簡單來說 #{} 會在將參數加上引號,例如:
SELECT * FROM user WHERE username=#{username} ;
帶上參數後的SQL語句即:
SELECT * FROM user WHERE username="XuLiTong" ;
而${}並不會在給參數加上引號,例如:
SELECT * FROM user ORDER BY ${id} DESC LIMIT #{offset},#{limit};
帶上參數後的SQL語句為:
SELECT * FROM user ORDER BY id DESC LIMIT 0,10;
可見,mybatis對參數沒有進行任何的處理。通常${}用於GROUP BY,ORDER BY ,LIMIT等的後面。
但是,實際應用中,並不提倡使用 ${},因為使用 #{} 寫法,除瞭可以防止sql註入以外,還能在參數裡含有單引號的時候自動轉義。