MYBATIS框架學習之MAPPER.XML 檔案中的輸入引數詳解
阿新 • • 發佈:2021-12-23
1.簡介
在前面的章節中,我們看到,在 mapper.xml 檔案中,都使用 #{value} 或者 #{屬性值} 的方式來顯示輸入引數,其實 mybatis 還支援另一種寫法。 ${value} 或者 ${屬性值},本章著重講解下 ${} 的使用方法;
2. # 和 $ 二者異同
#{} 這種方式會自動給 {} 裡面的值附上 ’ '(單引號);KaTeX parse error: Expected 'EOF', got '#' at position 16: {} 這種方式只是會原樣輸出 #̲{} 這種方式可以防止 sql…{} 這種方式不可以防止 sql 注入
但是請注意:因為 $ 有 sql 注入的風險,所以儘量使用 #{} 的形式。
3.$ 的使用場景
$ {} 只使用在動態排序的應用中。何為動態排序,即:如我們現有如下表:
create table person ( id int(10) auto_increment comment '人員ID' primary key, name varchar(20) null comment '姓名', age int(20) null comment '年齡', sex int(10) null comment '性別:1-男,0-女' ) comment '人力表' ;
我們想根據傳值不同分別依靠姓名、年齡進行排序,此時我們希望得到的 sql 如下,select * from person order by name desc;或者 select * from person order by age desc。如果我們此時採用 #{},那麼我們得到的 sql 就是 select * from person order by ‘name’,顯然有了單引號不是我們期待的結果。
此時我們的 mapper.xml 檔案應該如下配置:
<!--進行動態排序後進行查詢--> <select id="selectOrderByValue" resultType="Person" parameterType="String"> select * from person order by ${value} ASC </select>
但是如果我們寫成
<!--進行動態排序後進行查詢--> <select id="selectOrderByValue" resultType="Person" parameterType="String"> select * from person order by #{value} ASC </select>
4.總結
不到萬不得已。請禁止使用 ${}的樣式;