Mybatis的.xml文件中传参使用的#{}与${}的区别

1 篇文章 0 订阅
1 篇文章 0 订阅

在mybatis中#和$的主要区别是:
#传入的参数在SQL中显示为字符串,能够很大程度防止sql注入;
$传入的参数在SqL中直接显示为传入的值,无法防止Sql注入。

例如:

使用#{}:

select * from student where id = #{id}

当我们传递的参数id为 “1” 时,上述 sql 的解析为:

select * from student where id = "1"

使用${}:

select * from student where id = ${id}

当我们传递的参数id为 “1” 时,上述 sql 的解析为:

select * from student where id = 1

如果我们要做排序的话,使用#{}传入排序类型:asc、desc,就会出现一下问题:

ORDER BY time #{orderType} 

以上的orderType传入参数如果为:asc或者desc,那么sql解析结果为:

ORDER BY time "asc" 或者  ORDER BY time "desc"

因为排序默认asc排序,所以相当于如下:

ORDER BY time "asc" asc 或者  ORDER BY time "desc" asc 

所以就算传入desc也是无效的,传入的参数变成了time的别名

使用${}传入排序类型:asc、desc,那就不一样了,如下:

ORDER BY time ${orderType} 

以上的orderType传入参数如果为:asc或者desc,那么sql解析结果为:

ORDER BY time asc 或者  ORDER BY time desc

这样就能正确的做排序了,但是这样存在sql注入的风险;
传入的参数直接拼接在sql上,就会当作sql脚本运行;
所以尽量使用#{}传参;
如果实在需要用到${}传参的话,代码编写中就需要注意避免sql注入;

#方式能够很大程度防止sql注入。
$方式无法防止Sql注入。
KaTeX parse error: Expected 'EOF', got '#' at position 27: …对象,例如传入表名等 一般能用#̲的就别用

mybatis中还有<![CDATA[]]>的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程,或者大于号,小于号等,如:

<![CDATA[
	>=
]]>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MybatisXML文件,可以使用两种方式来编写like查询语句。第一种是使用${}占位符,例如可以在XML文件使用name LIKE '%${name}%'来进行模糊查询,其name是一个变量,通过传参来替换${name}。 另一种方式是使用#{}占位符,例如可以使用address LIKE "%"#{address}"%"来进行模糊查询,其address也是一个变量,通过传参来替换#{address}。 在直接传参,可以将要查询的关键字直接拼接到查询语句,如%keyword%,然后将该查询语句作为参数传入Mybatis的映射文件。这样可以实现动态的模糊查询。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mybatis xml 文件like模糊查询](https://blog.csdn.net/weixin_30268921/article/details/99451810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [SSM框架的学习与应用-Java EE企业级应用开发学习记录(第一天)Mybatis的学习资料](https://download.csdn.net/download/m0_53659738/88235079)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗中逆行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值