MyBatis中 #{} 和 ${}的区别

Posted jumpkin1122

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis中 #{} 和 ${}的区别相关的知识,希望对你有一定的参考价值。

 

#:如果传入的是字符串,则会将其中的值作为字符串拼接sql上。 安全

$:如果传入的是字符串,则不会作为字符串,而是直接拼接到sql上。不安全

条件名:name = "age"
select
* from user order by #name; --> select * from user order by age; select * from user order by $name; --> select * from user order by age;

 

#和$

#表示一个占位符号,通过#可以实现preparedStatement向占位符中设置值,自动进行java数据类型和jdbc类型转换,#可以有效的防止sql注入。可以接收基本类型值或类对象(user)。如果parameterType传输单个基本类型值,#括号中可以是value或其他名称。自动识别。

$表示拼接sql串,通过$可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,$可以接收简单类型值或对象类对象(user)属性值,如果parameterType传输单个基本类型值,$括号中只能是value。

以上是关于MyBatis中 #{} 和 ${}的区别的主要内容,如果未能解决你的问题,请参考以下文章

mybatis和hibernate的区别

Mybatis中#{}和${}传参的区别及#和$的区别小结

MyBatis中resultMap=“Map”和resultType=“Map”区别

Mybatis中#{}和${}传参的区别及#和$的区别小结(转)

mybatis和ibatis的区别

Mybatis的mapper文件中#和$的区别 以及 resultType和resultMap的区别