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>

版权声明:本文博客原创文章,博客,未经同意,不得转载。

最新文章

  1. C语言中,头文件和源文件的关系(转)
  2. ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册
  3. C#-WebForm-ASP开发练习:从数据库中动态添加信息
  4. java生成带logo的二维码,自定义大小,logo路径取服务器端
  5. toString()方法
  6. ASP.NET MVC 下拉列表使用小结
  7. php 查询出来的字段名全是小写或者大写
  8. 关于C++对汉字拼音的处理(3)
  9. DataReader 和 DataSet 的区别
  10. Android学习笔记(十二)BroadcastReceiver的有序广播和优先级
  11. systemtap分析软raid io拆分问题
  12. hold
  13. 简单的Mvp设计
  14. 【iOS开展-50】使用它来创建一个新的类的实现代码包,因此,不自觉地练习简单MVC实验,附带动画
  15. mysql5.6.16绿色版配置、运行
  16. .net mvc页面UI之Jquery博客日历控件
  17. jedis使用api
  18. event对应的各种坐标
  19. (亲测)1分钟破解IDM权限,傻瓜都能学会的破解方法(番外篇:利用破解工具直接破解IDM)
  20. 201621123060 《Java程序设计》第五周学习总结

热门文章

  1. wbadmin delete backup删除服务器旧的镜像备份
  2. java多线程Future和Callable类的解释与使用
  3. Nutch 二次开发parse纸
  4. uboot的relocation原理具体分析
  5. 设计模式 - 出厂模式(factory pattern) 详细说明
  6. Myeclipse 10/2014 配置插件(svn、maven、properties、velocity)方法
  7. linux下磁盘进行分区、文件系统创建、挂载和卸载(转)
  8. 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构
  9. uav 11258 String Partition (DP)
  10. PHP redis操作类 个人总结