[DB][mybatis]MyBatis mapper文件引用变量#{}与${}差异
2024-10-13 00:04:32
MyBatis mapper文件引用变量#{}与${}差异
默认,使用#{}语法,MyBatis会产生PreparedStatement中。而且安全的设置PreparedStatement參数,这个过程中MyBatis会进行必要的安全检查和转义。
演示样例1:
运行SQL:Select * from emp where name = #{employeeName}
參数:employeeName=>Smith
解析后运行的SQL:Select * from emp where name = ?
运行SQL:Select * from emp where name = ${employeeName}
參数:employeeName传入值为:Smith
解析后运行的SQL:Select * from emp where name =Smith
综上所述、${}方式会引发SQL注入的问题、同一时候也会影响SQL语句的预编译。所以从安全性和性能的角度出发。能使用#{}的情况下就不要使用${}
可是${}在什么情况下使用呢?
有时候可能须要直接插入一个不做不论什么改动的字符串到SQL语句中。这时候应该使用${}语法。
比方,动态SQL中的字段名,如:ORDER BY ${columnName}
注意:当使用${}參数作为字段名或表名时、需指定statementType为“STATEMENT”,如:
<select id="queryMetaList" resultType="Map" statementType="STATEMENT">Select * from emp where name = ${employeeName} ORDER BY ${columnName}</select>
版权声明:本文博客原创文章,博客,未经同意,不得转载。
最新文章
- C语言中,头文件和源文件的关系(转)
- ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册
- C#-WebForm-ASP开发练习:从数据库中动态添加信息
- java生成带logo的二维码,自定义大小,logo路径取服务器端
- toString()方法
- ASP.NET MVC 下拉列表使用小结
- php 查询出来的字段名全是小写或者大写
- 关于C++对汉字拼音的处理(3)
- DataReader 和 DataSet 的区别
- Android学习笔记(十二)BroadcastReceiver的有序广播和优先级
- systemtap分析软raid io拆分问题
- hold
- 简单的Mvp设计
- 【iOS开展-50】使用它来创建一个新的类的实现代码包,因此,不自觉地练习简单MVC实验,附带动画
- mysql5.6.16绿色版配置、运行
- .net mvc页面UI之Jquery博客日历控件
- jedis使用api
- event对应的各种坐标
- (亲测)1分钟破解IDM权限,傻瓜都能学会的破解方法(番外篇:利用破解工具直接破解IDM)
- 201621123060 《Java程序设计》第五周学习总结
热门文章
- wbadmin delete backup删除服务器旧的镜像备份
- java多线程Future和Callable类的解释与使用
- Nutch 二次开发parse纸
- uboot的relocation原理具体分析
- 设计模式 - 出厂模式(factory pattern) 详细说明
- Myeclipse 10/2014 配置插件(svn、maven、properties、velocity)方法
- linux下磁盘进行分区、文件系统创建、挂载和卸载(转)
- 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构
- uav 11258 String Partition (DP)
- PHP redis操作类 个人总结