mybatis的#{}与${}区别(10分)

发布时间:2024-01-16 11:44:58

?\#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

\#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。


`${}`表示一个拼接符号,会引用sql注入,所以不建议使用${}。

${}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

在mybatis中,#和$占位符都是实现动态SQL的一种方式,通过这两种方式把参数传递到xml文件中,在执行操作前,mybatis会对两种站位符进行解析,
\#占位符等同于JDBC中的?占位符,相当于PreparedStatement中预处理语句中设置的参数,且其SQL语句是预编译的,使用占位符规定了SQL的结构,且在设置参数时,若出现特殊字符,会自动转义,有效的防止了SQL注入
而$的方式是传参,相当于把参数直接拼接到原始SQL里面,mybatis不会对它进行特殊处理,
所以$和#最大的区别在于前者是动态参数,后者是占位符,动态参数无法防止SQl注入,在实际应用中会尽可能的使用#。

文章来源:https://blog.csdn.net/weixin_52104995/article/details/135619254
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。