MYBATIS框架学习之MAPPER.XML 文件中的输入参数详解
1.简介
在前面的章节中,我们看到,在 mapper.xml 文件中,都使用 #{value} 或者 #{属性值} 的方式来显示输入参数,其实 mybatis 还支持另一种写法。 ${value} 或者 ${属性值},本章着重讲解下 ${} 的使用方法;
2. # 和 $ 二者异同
#{} 这种方式会自动给 {} 里面的值附上 ’ '(单引号);KaTeX parse error: Expected 'EOF', got '#' at position 16: {} 这种方式只是会原样输出 #̲{} 这种方式可以防止 sql…{} 这种方式不可以防止 sql 注入
但是请注意:因为 $ 有 sql 注入的风险,所以尽量使用 #{} 的形式。
3.$ 的使用场景
$ {} 只使用在动态排序的应用中。何为动态排序,即:如我们现有如下表:
1 2 3 4 5 6 7 8 9 10 | 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 文件应该如下配置:
1 2 3 4 | <!--进行动态排序后进行查询--> <select id= "selectOrderByValue" resultType= "Person" parameterType= "String" > select * from person order by ${value} ASC </select> |
但是如果我们写成
1 2 3 4 | <!--进行动态排序后进行查询--> <select id= "selectOrderByValue" resultType= "Person" parameterType= "String" > select * from person order by #{value} ASC </select> |
4.总结
不到万不得已。请禁止使用 ${}的样式;
本文来自博客园,作者:jevan,转载请注明原文链接:https://www.cnblogs.com/DoNetCShap/p/15723950.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端