mybatis中#{}和${}区别
mybatis 传值常用的两种方式:#{}、${}
方式一:#{}
一般常用,主要用来防止sql注入。
eg: select * from user where userName = #{userName}
该方式在解析例子中的sql时,会先进行预编译--》select * from user where userName = ?
然后将变量中的值传递 eg : select * from user where userName = "zhangsan"。此时才将需要传递的值 赋值给变量。
从而能够有效的防止sql注入。
但是如果对user表中的某个字段进行排序
eg: select * from user order by #{createTime} 此时 经过预编译后的sql如下
select * from user order by "createTime"---->所以查出的结果是无效的。
所以上面的写法需要更正 eg: select * from user order by ${createTime}
方式二:${}
该方式不能防止sql注入。一般用来传递数据库对象如表名。
${}是先将值传入后再预编译
eg:select * from user order by ${createTime}--->select * from user order by createTime
所以mybatis在进行传值的时候,需要特别注意。通常情况下都是以#{}方式来传值。
初次开始写博客,如有不对之处请指出来。谢谢!