Mybatis配置中,取出map入参的数据一般有两种方式#{key}${key},下面是这两种取值的区别:

  以同样的语句做对比:

<select id="geUserByParam1" resultType="Map" parameterType="Map">
select * from t_user t where t.name=#{name} and t.password=#{password}
</select>
<select id="geUserByParam2" resultType="Map" parameterType="Map">
select * from t_user t where t.name=${name} and t.password=${password}
</select>

  如果传入的name和password参数分别是:admin和123456。

#{key}取值后执行的sql是select * from t_user t where t.name='admin' and t.password='123456'

${key}取值后执行的sql是select * from t_user t where t.name=admin and t.password=123456

很明显,#{key}取值会自动将值看成是字符串类型,并带上单引号;而${key}取值就是传的值是啥就是啥。由此可见#{key}取值可以防止sql注入,而${key}取值可能会引起sql注入情况。有的时候用模糊查询可能会用到${key}取值,比如:

<select id="geUserByParam3" resultType="Map" parameterType="Map">
select * from t_user t where t.name like '%${name}%'
</select>

其实这种情况也可以用#{key}来代替的:

<select id="geUserByParam3" resultType="Map" parameterType="Map">
select * from t_user t where t.name like concat('%',#{name},'%')
</select>

因此建议尽量在开发中用#{key}取值,这样确实可以避免一些问题!

注意:本文仅代表个人理解和看法哟!和本人所在公司和团体无任何关系!

Mybatis中$和#取数据的区别的更多相关文章

  1. mybatis中#{}与${}取值的区别

    1. 首先对于一个接口 Employee getEmpByIdAndName(@Param("id") Integer id,@Param("empName") ...

  2. mybatis foreach批量插入数据:Oracle与MySQL区别

    mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分 ...

  3. C#程序中从数据库取数据时需注意数据类型之间的对应,int16\int32\int64

    private void btn2_Click(object sender, RoutedEventArgs e)         {             using (SqlConnection ...

  4. UI:字典的两种取值的区别

    字典的两种取值的区别 (objectForKey: 和 valueForKey )参考 一般来说 key 可以是任意字符串组合,如果 key 不是以 @ 符号开头,这时候 valueForKey: 等 ...

  5. C#抓取数据、正则表达式+线程池初步运用

    去年底用 多线程+HtmlAgilityPack.dll 写了一个抓取“慧聪网” 公司信息的小程序,代码惨不忍赌.好在能抓到数据,速度也能让人忍受就很久没管了. 最近这段时间把这个小程序发给同事看着玩 ...

  6. Mybatis按顺序获取数据

    sql语句select * from producttg where hospitalcode in (1,2,3)  获取到的数据并不是按照条件1,2,3的顺序排列,如果要成下面形式(mybatis ...

  7. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  8. scrapy爬取数据的基本流程及url地址拼接

    说明:初学者,整理后方便能及时完善,冗余之处请多提建议,感谢!   了解内容: Scrapy :抓取数据的爬虫框架     异步与非阻塞的区别   异步:指的是整个过程,中间如果是非阻塞的,那就是异步 ...

  9. Mybatis使用TypeHandler实现数据的加解密转换

    参考: MyBatis之TypeHandler: https://www.cnblogs.com/yulinfeng/p/5991170.html   前段时间收到这么个需求:为安全起见,要求在数据库 ...

随机推荐

  1. Android开发之程序猿必需要懂得Android的重要设计理念

         前几天去參加了带着自己的作品去參加服务外包大赛,由于签位抽到的比較靠后就等待了蛮久,就跟坐在前面的一起參赛的选手開始讨论Android的开发经验.各自给对方展示了自己的作品,小伙伴就建议我看 ...

  2. android 样式和主题

  3. Django rest_framework 频率控制组件

    频率控制 一.频率控制实现一 from rest_framework.views import APIView from rest_framework.response import Response ...

  4. $@、$*和环境变量IFS

  5. nexus私服仓库搭建以及项目引用

    第一步:使用ubunto下载安装nexus  并打开登录进入到nexus管理页面,默认账号为 admin  密码在 admin.password 中,首次登录会让你重新修改密码 第二步  配置自己本地 ...

  6. Python新建文件夹

    import os os.mkdir('OS-Demo-2') os.makedirs('OS-Demo-3/sub-Dir-1') os.mkdir()和os.makedirs()都可以新建文件夹, ...

  7. 【leetcode】967. Numbers With Same Consecutive Differences

    题目如下: Return all non-negative integers of length N such that the absolute difference between every t ...

  8. Delphi 左键代替右键

    Delphi 左键代替右键: var Pt: TPoint; begin GetCursorPos(Pt); PopupMenu1.Popup(Pt.X, Pt.Y); end;

  9. 欧拉降幂,基本计算定理——cf615D

    用基本算数定理求约数和的思想来计算, 首先用pi,ci来表示第i个质数,指数为i,然后对于每个pi,pi^2...都有指数为mul{(c_1+1)(c_2+1)(c_i-1+1)(c_i+1+1).. ...

  10. lnmp mysql高负载优化

    mysql负载会造成cpu占用高的问题如果没启用innodb的话 用这个配置/usr/local/mysql/share/mysql/my-large.cnf 替换/etc/my.cnf 也可参考如下 ...