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

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

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

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


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

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

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

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

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

你可能感兴趣的:(java,开发语言,mybatis)