Mybatis中$和#取数据的区别
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中$和#取数据的区别的更多相关文章
- mybatis中#{}与${}取值的区别
1. 首先对于一个接口 Employee getEmpByIdAndName(@Param("id") Integer id,@Param("empName") ...
- mybatis foreach批量插入数据:Oracle与MySQL区别
mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分 ...
- C#程序中从数据库取数据时需注意数据类型之间的对应,int16\int32\int64
private void btn2_Click(object sender, RoutedEventArgs e) { using (SqlConnection ...
- UI:字典的两种取值的区别
字典的两种取值的区别 (objectForKey: 和 valueForKey )参考 一般来说 key 可以是任意字符串组合,如果 key 不是以 @ 符号开头,这时候 valueForKey: 等 ...
- C#抓取数据、正则表达式+线程池初步运用
去年底用 多线程+HtmlAgilityPack.dll 写了一个抓取“慧聪网” 公司信息的小程序,代码惨不忍赌.好在能抓到数据,速度也能让人忍受就很久没管了. 最近这段时间把这个小程序发给同事看着玩 ...
- Mybatis按顺序获取数据
sql语句select * from producttg where hospitalcode in (1,2,3) 获取到的数据并不是按照条件1,2,3的顺序排列,如果要成下面形式(mybatis ...
- ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...
- scrapy爬取数据的基本流程及url地址拼接
说明:初学者,整理后方便能及时完善,冗余之处请多提建议,感谢! 了解内容: Scrapy :抓取数据的爬虫框架 异步与非阻塞的区别 异步:指的是整个过程,中间如果是非阻塞的,那就是异步 ...
- Mybatis使用TypeHandler实现数据的加解密转换
参考: MyBatis之TypeHandler: https://www.cnblogs.com/yulinfeng/p/5991170.html 前段时间收到这么个需求:为安全起见,要求在数据库 ...
随机推荐
- Android开发之程序猿必需要懂得Android的重要设计理念
前几天去參加了带着自己的作品去參加服务外包大赛,由于签位抽到的比較靠后就等待了蛮久,就跟坐在前面的一起參赛的选手開始讨论Android的开发经验.各自给对方展示了自己的作品,小伙伴就建议我看 ...
- android 样式和主题
- Django rest_framework 频率控制组件
频率控制 一.频率控制实现一 from rest_framework.views import APIView from rest_framework.response import Response ...
- $@、$*和环境变量IFS
- nexus私服仓库搭建以及项目引用
第一步:使用ubunto下载安装nexus 并打开登录进入到nexus管理页面,默认账号为 admin 密码在 admin.password 中,首次登录会让你重新修改密码 第二步 配置自己本地 ...
- Python新建文件夹
import os os.mkdir('OS-Demo-2') os.makedirs('OS-Demo-3/sub-Dir-1') os.mkdir()和os.makedirs()都可以新建文件夹, ...
- 【leetcode】967. Numbers With Same Consecutive Differences
题目如下: Return all non-negative integers of length N such that the absolute difference between every t ...
- Delphi 左键代替右键
Delphi 左键代替右键: var Pt: TPoint; begin GetCursorPos(Pt); PopupMenu1.Popup(Pt.X, Pt.Y); end;
- 欧拉降幂,基本计算定理——cf615D
用基本算数定理求约数和的思想来计算, 首先用pi,ci来表示第i个质数,指数为i,然后对于每个pi,pi^2...都有指数为mul{(c_1+1)(c_2+1)(c_i-1+1)(c_i+1+1).. ...
- lnmp mysql高负载优化
mysql负载会造成cpu占用高的问题如果没启用innodb的话 用这个配置/usr/local/mysql/share/mysql/my-large.cnf 替换/etc/my.cnf 也可参考如下 ...