• 介绍

    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. Javascript - 栈 和 单链表

    最近在重温数据结构,于是写了一些代码玩玩,都是很初级的,表喷各位.... function Stack() { this.dataStore = []; this.top = 0; } Stack.p ...

  2. .NET Actor Model Implementations Differ in Approach

    Last week Vaughn Vernon, author of Implementing Domain-Driven Design, published Dotsero, a .NET Acto ...

  3. 20个最漂亮的基于WordPress的企业网站

    20个最漂亮的基于WordPress的企业网站 每个人都知道很好很强大的WordPress是开源的,并且有一个很强的的团队和更强大的支持社区.它被世界上的广大设计师.程序员和商业人员广泛使用.它已经成 ...

  4. FancyTree 状态保持

    FancyTree非常优秀的树控件 examples:http://wwwendt.de/tech/fancytree/ 如何将树节点的选中状态保存下来,无论刷新页面还是,ajax重复请求,都保持在上 ...

  5. 【C】——幻方算法

    一.幻方按照阶数可分成了三类,即奇数阶幻方.双偶阶幻方.单偶阶幻方. 二.奇数阶幻方(劳伯法) 奇数阶幻方最经典的填法是罗伯法.填写的方法是: 把1(或最小的数)放在第一行正中:按以下规律排列剩下的( ...

  6. WebStorm11 注册

    WebStorm11 注册 http://2.idea.lanyus.com/

  7. 安装mmseg出错 config.status: error: cannot find input file: src/Makefile.in

    aclocallibtoolize --forceautomake --add-missingautoconfautoheadermake clean

  8. 再也不必当心我的密码了,多个SAP 客户端自动输入密码

    再也不必当心我的密码了,多个SAP 客户端自动输入密码问题: 通常对于OFFICE人员来说,一天有很多的密码,OA密码,多个ERP密码,邮箱密码,代理密码等等,还经常60天过期之类,实在是焦头烂额. ...

  9. 图解 & 深入浅出 JavaWeb:Servlet 再说几句

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  10. adb permission denied

    1.没有得到root权限,可以用刷机精灵一键root. 2.root不彻底,手机安装超级adbd,即可.