1. 程式人生 > 其它 >MYBATIS框架學習之MAPPER.XML 檔案中的輸入引數詳解

MYBATIS框架學習之MAPPER.XML 檔案中的輸入引數詳解

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.總結

不到萬不得已。請禁止使用 ${}的樣式;