• 介绍

    MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型。

    在SQL中引用这些参数的时候,可以使用两种方式#{parameterName}或者${parameterName}。

  • #{}

    #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。

      例如:order by #{parameterName} //或取Map中的value#{Key}也是一样操作。

      假设传入参数是“Smith”

      会解析成:order by "Smith"

  • ${}

    $将传入的数据直接显示生成在sql中。

      例如:order by #{parameterName} //或取Map中的value#{Key}也是一样操作。

      假设传入参数是“Smith”

      会解析成:order by Smith

  • 概念
  1. #方式能够很大程度防止sql注入,$方式无法防止Sql注入。
  2. $方式一般用于传入数据库对象,例如传入表名。
  3. 从安全性上考虑,能使用#尽量使用#来传参,因为这样可以有效防止SQL注入的问题。
  • 重点

   MyBatis排序时使用order by 动态参数时需要注意,用$而不是#!

    例如:ORDER BY ${columnName} //这里MyBatis不会修改或转义字符串,可实现动态传入排序。

    建议:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。

       这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

    附加:Map传入判断条件进行动态排序

  <!--
假设:
Map<String,Object> map=new HashMap<String,Object>();
map.put("turn","c.ordinaryPrice"); //以商品的普通价格排序
-->
<select id="" parameterType="Map" resultType="com.entity.Commodity" >
SELECT *
FROM commodity c
where 1=1
<!-- _parameter.containsKey('键') 作用:判断键是否存在返回值boolean #{键}取对应的值 !必须三处键值对应,否则取不到值-->
<if test="_parameter.containsKey('varietyID')">
ORDER BY ${turn}
</if>
</select>

Mybatis 中在传参时,${} 和#{} 的区别的更多相关文章

  1. (后端)Mybatis中#{}和${}传参的区别及#和$的区别小结(转)

    原文地址:https://www.cnblogs.com/zqr99/p/8094234.html 最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, ...

  2. Mybatis中#{}和${}传参的区别及#和$的区别小结

    最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"&quo ...

  3. 记录下mybatis中#{}和${}传参的区别

    最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"&quo ...

  4. Mybatis中#{}和${}传参的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  5. Python中的传参是传值还是传址?

    传值:在C++中,传值就是把一个参数的值给这个函数,其中的更改不会影响原来的值. 传址:即传引用,直接把这个参数的内存地址传递进去,直接去这个内存地址上进行修改. 但是这些在Python中都没有,Py ...

  6. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  7. apiCloud中openFrameGroup传参

    apiCloud中openFrameGroup传参 1.无效的 api.openFrameGroup({ // 打开 frame 组 name: 'group', scrollEnabled: fal ...

  8. Vue-CLI项目中路由传参

    Vue-CLI项目中路由传参 一.标签传参方式:<router-link></router-link> 第一种 router.js { path: '/course/detai ...

  9. Vue-cli中axios传参的方式以及后端取的方式

    0917自我总结 Vue-cli中axios传参的方式以及后端取的方式 一.传参 params是添加到url的请求字符串中的,用于get请求. data是添加到请求体(body)中的, 用于post请 ...

随机推荐

  1. Windows技巧 - 右键菜单【在此处打开bash】

    实现效果如下图: 步骤如下:按住shift,在文件夹空白处(桌面也可以)鼠标右键,即可看到 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROO ...

  2. 【LeetCode】257. Binary Tree Paths

    Binary Tree Paths Given a binary tree, return all root-to-leaf paths. For example, given the followi ...

  3. jqPlot插件绘制柱状图

    每天都在这里看别人写的东西,确发现自己好久没写文章了,可能是因为确实很忙,或许这也是在给自己找的一种借口. 不过这也是我人生中加入得第一个创业公司,来到这里才知道创业公司其实真的很辛苦,产品的萌芽才开 ...

  4. UiAutomator源代码分析之UiAutomatorBridge框架

    上一篇文章<UIAutomator源代码分析之启动和执行>我们描写叙述了uitautomator从命令行执行到载入測试用例执行測试的整个流程.过程中我们也描写叙述了UiAutomatorB ...

  5. .net微信公众号开发——快速入门

    作者:王先荣 最近在学习微信公众号开发,将学习的成果做成了一个类库,方便重复使用. 现在微信公众号多如牛毛,开发微信的高手可以直接无视这个系列的文章了. 使用该类库的流程及寥寥数行代码得到的结果如下. ...

  6. 10大经典CSS3菜单应用欣赏

    很多时候,我们的网页菜单需要个性化,从而来适应各种行业的用户视觉操作体验.本文将带领大家一起来欣赏10个非常经典的CSS3菜单应用,菜单涉及到动画菜单.Tab菜单.面包屑菜单等. 1.CSS3飘带状3 ...

  7. 自己封装的android客户端http网络框架

    整个框架是基于阿帕奇的httpclient搭建的,框架类图如下,我是用Astah Professional画出来,将项目导入,自动生成所有类关系图,还是挺方便的: 核心类是HttpManager和Ht ...

  8. 严重: Exception starting filter struts2解决方法!

    转自:http://blog.knowsky.com/260578.htm 问题出现: 严重: Exception starting filter struts2java.lang.ClassNotF ...

  9. WPF自定义控件

    一.ImageButton 1.继承ImageButtonButton,添加依赖属性 using System; using System.Windows; using System.Windows. ...

  10. WIN8 下Cisco VPN连接 出现vpn 422 failed to enable virtual adapter错误

    今天在家用VPN软件连接,出现了“vpn 422 failed to enable virtual adapter”的错误,系统安装的是Win8专业版32位,百度了半天又很多方法解决不了,后来发现了一 ...