Loading

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.总结

不到万不得已。请禁止使用 ${}的样式;

posted @ 2021-12-23 16:03  jevan  阅读(654)  评论(0编辑  收藏  举报